python3文件IO – Python3教程

上一章Python教程请查看:python3字典dictionary
在本文中,你将了解Python文件操作。更具体地说,打开文件、从文件中读取、写入文件、关闭文件以及你应该注意的各种文件方法。
什么是文件?文件是磁盘上存储相关信息的指定位置,它用于在非易失性内存(如硬盘)中永久存储数据。
由于随机存取存储器(RAM)是易失性的,当计算机被关闭时,它会丢失它的数据,所以我们使用文件作为未来数据的使用。
当我们想要读写一个文件时,我们需要先打开它,完成后,需要关闭它,以便释放与文件绑定的资源。
因此,在Python中,文件操作按以下顺序进行。

  • 打开一个文件
  • 读或写(执行操作)
  • 关闭文件
如何打开文件?Python有一个内置函数open()来打开文,这个函数返回一个file对象,也称为句柄,因为它用于相应地读取或修改文件。
>>> f = open("test.txt")# 打开当前目录中的文件 >>> f = open("C:/Python33/README.txt")# 指定完整路径

我们可以在打开文件时指定模式,在模式中,我们指定是读取“r”、写入“w”还是将“a”附加到文件中,我们还指定是否以文本模式或二进制模式打开文件。
默认的阅读模式是文本模式,在这种模式下,我们从文件中读取字符串。
另一方面,二进制模式返回字节,这是处理图像或exe文件等非文本文件时使用的模式。
Python文件模式
模式 描述
‘ r’ 打开一个文件进行阅读。(默认)
‘ w’ 打开一个文件进行写作。如果文件不存在,则创建新文件; 如果文件存在,则截断该文件。
‘ x’ 打开文件进行独占创建。如果文件已经存在,则操作失败。
‘ a’ 打开文件末尾的附加部分,但不截断它。创建一个不存在的新文件。
‘ t’ 以文本模式打开。(默认)
‘ b’ 以二进制模式打开。
‘ +’ 打开文件进行更新(读和写)
f = open("test.txt")# 等价于 'r' 或 'rt' f = open("test.txt",'w')# 以文字模式写入 f = open("img.bmp",'r+b') # 以二进制方式读写

与其他语言不同,字符“a”在使用ASCII(或其他等效编码)编码之前并不表示数字97。
此外,默认编码是平台相关的,在windows中是“cp1252”,而在Linux中是“utf-8”。
因此,我们也不能依赖于默认编码,否则我们的代码在不同的平台上的表现会有所不同。
因此,在文本模式下处理文件时,强烈建议指定编码类型。
f = open("test.txt",mode = 'r',encoding = 'utf-8')

如何使用Python关闭文件?当我们完成对文件的操作时,我们需要正确地关闭文件。
关闭一个文件将释放与该文件相关的资源,这是使用Python close()方法完成的。
Python有一个垃圾收集器来清理未引用的对象,但是我们不能依赖它来关闭文件。
f = open("test.txt",encoding = 'utf-8') # 执行文件操作 f.close()

这种方法并不完全安全,如果在对文件执行某些操作时发生异常,代码将退出,但不会关闭文件。
更安全的方法是try…finally块。
try: f = open("test.txt",encoding = 'utf-8') # 执行文件操作 finally: f.close()

通过这种方式,我们可以确保即使引发了异常,文件也被正确关闭,从而导致程序流停止。
最好的方法是使用with语句,这可以确保在退出其中的块时关闭文件。
我们不需要显式地调用close()方法,它是在内部完成的。
with open("test.txt",encoding = 'utf-8') as f: # 执行文件操作

如何使用Python写文件?为了在Python中写入文件,我们需要在写’ w’ 、附加’ a’ 或独占创建’ x’ 模式中打开它。
我们需要小心’ w’ 模式,因为它将覆盖到文件,如果它已经存在,所有以前的数据被删除。
使用write()方法写入字符串或字节序列(对于二进制文件),此方法返回写入文件的字符数。
with open("test.txt",'w',encoding = 'utf-8') as f: f.write("第一个文件\n") f.write("该文件\n\n") f.write("包含三行\n")

这个程序将创建一个名为’ test ‘ 的新文件。txt’ 如果它不存在,如果它确实存在,则会被覆盖。
我们必须包含换行符来区分不同的行。
如何在Python中读取文件?要读取Python中的文件,必须以读取模式打开文件。
有各种各样的方法可以达到这个目的,我们可以使用read(size)方法来读取数据的大小,如果没有指定size参数,它将读取并返回到文件末尾。
>>> f = open("test.txt",'r',encoding = 'utf-8') >>> f.read(4)# 读取前4个数据 '第一个文件' >>> f.read(4)# 读取接下来的4个数据 ' 该文件' >>> f.read()# 读入剩余部分直到文件结束 '第一个文件\n 该文件\n包含三行s\n' >>> f.read()# 返回空字符串 ''

我们可以看到,read()方法以’ \n’ 的形式返回新行,一旦到达文件的末尾,我们在进一步读取时会得到空字符串。
我们可以使用seek()方法更改当前文件的光标(位置),类似地,tell()方法返回当前位置(以字节数为单位)。
>>> f.tell()# 获取当前文件位置 56 >>> f.seek(0)# 将文件光标移到初始位置0 >>> print(f.read())# 读取整个文件 第一个文件 该文件 包含三行

我们可以使用for循环逐行读取文件,这既高效又快速。
>>> for line in f: ...print(line, end = '') ... 第一个文件 该文件 包含三行

文件本身的行具有换行字符’ \n’ 。
此外,print()结束参数在打印时避免了两行换行。
或者,我们可以使用readline()方法来读取文件的各个行,此方法读取文件直到换行,包括换行字符。
>>> f.readline() '第一个文件\n' >>> f.readline() '该文件\n' >>> f.readline() '包含三行\n' >>> f.readline() ''

最后,readlines()方法返回整个文件的剩余行列表,当到达文件末尾(EOF)时,所有这些读取方法都返回空值。
>>> f.readlines() ['第一个文件\n', '该文件\n', '包含三行\n']

Python文件方法file对象有多种可用的方法,其中一些已经在上面的例子中使用过。
【python3文件IO – Python3教程】下面是在文本模式下的方法的完整列表,并有一个简短的描述。
Python文件方法
方法 描述
close() 关闭打开的文件。如果文件已经关闭,则无效。
detach() 将底层二进制缓冲区与TextIOBaseand返回。
fileno() 返回文件的整数号(文件描述符)。
flush() 刷新文件流的写缓冲区。
isatty() 如果文件流是交互式的,则返回True。
read(n) 从文件中最多读取n个字符。如果为负或为空,则读取到文件结束。
readable() 如果可以读取文件流,则返回True。
readline(n=-1) 从文件中读取并返回一行。如果指定,最多读入nbytes。
readlines(n=-1) 从文件中读取并返回行列表。如果指定,最多读入n个字节/字符。
seek(offset,from=SEEK_SET) 将文件位置更改为偏移字节,参考from(开始、当前、结束)。
seekable() 如果文件流支持随机访问,则返回True。
tell() 返回当前文件位置。
truncate(size=None) 将文件流调整为字节大小。如果没有指定大小,请将大小调整到当前位置。
writable() 如果可以写入文件流,则返回True。
write(s) 将字符串s写入文件并返回写入的字符数。
writelines(lines) 向文件中写入行列表。

    推荐阅读