个性化阅读
专注于IT技术分析

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对象有多种可用的方法,其中一些已经在上面的例子中使用过。

下面是在文本模式下的方法的完整列表,并有一个简短的描述。

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) 向文件中写入行列表。
赞(0)
未经允许不得转载:srcmini » python3文件IO – Python3教程

评论 抢沙发

评论前必须登录!