网站开发静态和动态,用cdr做网站设计尺寸要多少,上饶招聘网站建设公司,邯郸市网站建设python 读写文件之 open 和 with open() 详细解析 文章目录 python 读写文件之 open 和 with open() 详细解析1. open() 和 with open() 能打开不同的文件类型吗#xff1f;2. 文本文件和二进制文件的区别2.1 文本文件 (Text Files)2.2 二进制文件 (Binary Files)区别 3. 读文…python 读写文件之 open 和 with open() 详细解析 文章目录 python 读写文件之 open 和 with open() 详细解析1. open() 和 with open() 能打开不同的文件类型吗2. 文本文件和二进制文件的区别2.1 文本文件 (Text Files)2.2 二进制文件 (Binary Files)区别 3. 读文件3.1 使用 open() 和 close()3.2 使用with open() 4. 写文件4.1 字符编码4.3 文件对象的属性 5.需要注意的点 当我们讨论文件操作时通常会涉及到open()和close()这两个函数。在Python中open()函数用于打开一个文件并返回一个文件对象而close()函数用于关闭之前打开的文件。然而在实际编程中使用with open()语句是一种更安全、更简洁的方式来处理文件操作。下面将详细介绍这些概念。 1. open() 和 with open() 能打开不同的文件类型吗
open() 和 with open() 在 Python 中都能用来打开各种类型的文件包括文本文件和二进制文件。它们之间的主要区别在于文件处理的方式和资源管理上而不是它们能够打开的文件类型。
不论使用 open() 还是 with open()你都可以打开以下类型的文件
文本文件 使用 ‘r’读取模式、‘w’写入模式、‘a’附加模式等文本模式来打开文件。二进制文件 使用 ‘rb’读取二进制模式、‘wb’写入二进制模式、‘ab’附加二进制模式等二进制模式来打开文件。
2. 文本文件和二进制文件的区别
2.1 文本文件 (Text Files)
文本文件是由一系列可打印的字符如字母、数字、标点符号等组成这些字符按照某种编码标准如 ASCII、UTF-8 等表示。文本文件的主要特点包括
可读性它们可以直接由人阅读和理解。通用性大多数文本编辑器和处理器都能够打开和编辑文本文件。简单性文本文件通常不包含复杂的格式化信息如字体样式、颜色等。编码文本文件需要使用一种字符编码方案来表示字符。常见的编码方案包括 ASCII、UTF-8、UTF-16 等。
文本文件的例子包括纯文本文件.txt、源代码文件如 .py、.java、HTML 文件.html、Markdown 文件.md等。
2.2 二进制文件 (Binary Files)
非文本文件或二进制文件包含了不仅仅是可打印字符的信息还包括了无法直接显示或解释的字节序列。这类文件的特点包括
不可读性通常情况下它们不能直接被人类阅读或理解除非使用特定的工具或应用程序。复杂性非文本文件可能包含复杂的格式化信息、图形数据、音频数据等。专用性每种类型的非文本文件通常都需要相应的软件来打开和处理。格式非文本文件通常具有特定的文件格式如图像文件.jpg、.png、音频文件.mp3、.wav、视频文件.mp4、.avi以及文档文件.docx、.pdf等。
区别
处理方式文本文件通常使用字符编码来表示内容而二进制文件则是以字节序列的形式存储数据。编辑工具文本文件可以用文本编辑器打开而二进制文件需要特定的应用程序来解析和展示其内容。存储效率对于大量数据二进制文件通常比文本文件更节省空间因为文本文件需要额外的字符编码开销。兼容性文本文件更容易在不同的系统和平台上进行交换而二进制文件可能由于平台差异导致兼容性问题。 3. 读文件
3.1 使用 open() 和 close()
使用Python内置的open()函数传入文件名和标示符 fopen(rF:\jupyter notebook files\text files.txt,r) #标示符r表示读如果文件不存在open()函数就会抛出一个错误并且给出错误码和详细的信息告诉你文件不存在 fopen(rF:\jupyter notebook files\text.txt,r)
Traceback (most recent call last):File stdin, line 1, in module
FileNotFoundError: [Errno 2] No such file or directory: F:\\jupyter notebook files\\text.txt调用read()方法可以一次读取文件的全部内容Python把内容读到内存用一个str对象表示 contentsf.read()print(contents)
naruto
bleach
onepiece最后需要调用close()方法关闭文件。文件使用完毕后必须关闭因为文件对象会占用操作系统的资源并且操作系统同一时间能打开的文件数量也是有限的 f.close()由于文件读写时都有可能产生IOError一旦出错后面的f.close()就不会调用。为了保证无论是否出错都能正确地关闭文件我们可以使用try … finally来实现
try:fopen(rF:\jupyter notebook files\text files.txt,r)contentsf.read()print(contents)
finally:if f:f.close()输出如下
naruto
bleach
onepiece3.2 使用with open()
每次都写close()比较繁琐Python引入with语句这样能够确保最后文件一定被关闭且不用手动再调用close方法效果和前面的try … finally是一样的。 注意
1、调用read()会一次性读取文件的全部内容
with open(rF:\jupyter notebook files\text files.txt,r) as f:contentsf.read()print(contents)输出如下
naruto
bleach
onepiece2、调用readline()可以每次读取一行内容
with open(rF:\jupyter notebook files\text files.txt,r) as f:af.readline()print(a)bf.readline()print(b)cf.readline()print(c)输出如下
narutobleachonepiece3、调用readlines()一次读取所有内容并按行返回list
with open(rF:\jupyter notebook files\text files.txt,r) as f:af.readlines()print(a)输出入下
[naruto\n, bleach\n, onepiece]4. 写文件
调用open()函数时传入标识符’w’或者’wb’表示写文本文件或写二进制文件
with open(rF:\jupyter notebook files\text files.txt,w) as f:af.write(attack on titan\n)要写入特定编码的文本文件请给open()函数传入encoding参数将字符串自动转换成指定编码。
4.1 字符编码
要读取非UTF-8编码的文本文件需要给open()函数传入encoding参数例如读取GBK编码的文件
with open(rF:\jupyter notebook files\gbk.txt, r, encodinggbk) as f:af.read()print(a)输出如下
gbk文本遇到有些编码不规范的文件你可能会遇到UnicodeDecodeError因为在文本文件中可能夹杂了一些非法编码的字符。遇到这种情况open()函数还接收一个errors参数表示如果遇到编码错误后如何处理。最简单的方式是直接忽略
with open(rF:\jupyter notebook files\gbk.txt, r, encodinggbk,errorsignore) as f: #注意errorsignoreaf.read()print(a)4.2 读写方式列表
模式描述r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。r打开一个文件用于读写。文件指针将会放在文件的开头。rb以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。w打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在创建新文件。wb以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在创建新文件。w打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在创建新文件。wb以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在创建新文件。a打开一个文件用于追加。如果该文件已存在文件指针将会放在文件的结尾。也就是说新的内容将会被写入到已有内容之后。如果该文件不存在创建新文件进行写入。ab以二进制格式打开一个文件用于追加。如果该文件已存在文件指针将会放在文件的结尾。也就是说新的内容将会被写入到已有内容之后。如果该文件不存在创建新文件进行写入。a打开一个文件用于读写。如果该文件已存在文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在创建新文件用于读写。ab以二进制格式打开一个文件用于追加。如果该文件已存在文件指针将会放在文件的结尾。如果该文件不存在创建新文件用于读写。
4.3 文件对象的属性
属性描述file.read([size])将文件数据作为字符串返回可选参数 size 控制读取的字节数file.readlines([size])返回文件中行内容的列表size 参数可选file.write(str)将字符串写入文件file.writelines(strings)将字符串序列写入文件file.close()关闭文件file.closed表示文件已经被关闭否则为 Falsefile.modeAccess 文件打开时使用的访问模式file.encoding文件所使用的编码file.name文件名file.newlines未读取到行分隔符时为 None只有一种行分隔符时为一个字符串当文件有多种类型的行结束符时则为一个包含所有当前所遇到的行结束的列表file.softspace为 0 表示在输出一数据后要加上一个空格符1 表示不加。这个属性一般程序员用不着由程序内部使用
5.需要注意的点
要读取非 UTF-8 编码的文本文件需要给 open() 函数传入 encoding 参数。读取时调用 read() 将一次性读取文件的全部内容如果文件有 10GB内存就爆了保险起见可以反复调用 read(size) 方法每次最多读取 size 个字节的内容。调用 readline() 可以每次读取一行内容调用 readlines() 一次读取所有内容并按行返回 list。根据需要调用如果文件很小read() 一次性读取最方便如果不能确定文件大小反复调用 read(size) 比较保险如果是配置文件调用 readlines() 更方便。