在 Python 中, IO 模块提供了三种 IO 操作的方法;原始二进制文件、缓冲二进制文件和文本文件。创建文件对象的规范方法是使用open()
函数。
任何文件操作都可以通过以下三个步骤来执行:
- 使用内置的 open() 功能打开文件获取文件对象。有不同的访问模式,您可以在使用打开()功能打开文件时指定。
- 使用从
open()
函数检索的文件对象执行读、写、追加操作。 - 关闭并释放文件对象。
正在读取文件
文件对象包括以下从文件中读取数据的方法。
- read(chars):从当前位置开始读取指定数量的字符。
- readline():读取从当前读取位置开始直到换行符的字符。
- readlines():读取所有行,直到文件结束,并返回一个 list 对象。
以下C:myfile.txt
文件将用于所有读写文件的例子。
C:myfile.txt
代码语言:javascript复制This is the first line. This is the second line.This is the third line.
Copy
以下示例使用read(chars)
方法执行读取操作。
Example: Reading a File
代码语言:javascript复制>>> f = open('C:myfile.txt') # opening a file>>> lines = f.read() # reading a file>>> lines'This is the first line. nThis is the second line.nThis is the third line.'>>> f.close() # closing file object
Copy
上图,f = open('C:myfile.txt')
从当前目录打开默认读取模式下的myfile.txt
,返回一个文件对象。 f.read()
函数读取所有内容,直到 EOF 为字符串。如果在read(chars)
方法中指定字符大小参数,那么它将只读取那么多字符。 f.close()
将冲水并关闭溪流。
阅读一行
下面的示例演示如何从文件中读取一行。
Example: Reading Lines
代码语言:javascript复制>>> f = open('C:myfile.txt') # opening a file>>> line1 = f.readline() # reading a line>>> line1'This is the first line. n'>>> line2 = f.readline() # reading a line>>> line2'This is the second line.n'>>> line3 = f.readline() # reading a line>>> line3'This is the third line.'>>> line4 = f.readline() # reading a line>>> line4''>>> f.close() # closing file object
Copy
如您所见,我们必须在'r'
模式下打开文件。readline()
方法将返回第一行,然后指向文件中的第二行。
阅读所有行
以下使用readlines()
功能读取所有行。
Example: Reading a File
代码语言:javascript复制>>> f = open('C:myfile.txt') # opening a file>>> lines = f.readlines() # reading all lines>>> lines'This is the first line. nThis is the second line.nThis is the third line.'>>> f.close() # closing file object
Copy
文件对象有一个内置的迭代器。以下程序逐行读取给定的文件,直到StopIteration
上升,即达到 EOF。
Example: File Iterator
代码语言:javascript复制f=open('C:myfile.txt')while True:
try:
line=next(f)
print(line)
except StopIteration:
breakf.close()
Copy
使用 for
循环可以轻松读取文件。
Example: Read File using the For Loop
代码语言:javascript复制f=open('C:myfile.txt')for line in f:
print(line)f.close()
Copy
Output
代码语言:javascript复制This is the first line. This is the second line.This is the third line.
Copy
读取二进制文件
使用open()
功能中的“rb”模式读取二进制文件,如下图所示。
Example: Reading a File
代码语言:javascript复制>>> f = open('C:myimg.png', 'rb') # opening a binary file>>> content = f.read() # reading all lines>>> content
b'x89PNGrnx1anx00x00x00rIHDRx00x00x00x08x00x00x00x08x08x06
x00x00x00xc4x0fxbex8bx00x00x00x19tEXtSoftwarex00Adobe ImageReadyq
xc9ex00x00x00x8dIDATxxdabxfcxffxff?x03x0c0/zPnxa4bx818xecox9c
xc2rx90x18x13x03*8txc4bxbcx01xa8Xx07$xc0xc8xb4xf0>\x11Pxd7?
xa0x84rx90xb9tx88?x00q Hxc1Cx16xc9x94_xccx025xfd2x88xb1x04
x88x85x90x14xfcx05xe2( x16x00xe2xc3x8cxc8x8ex84:xb4x04H5x03
xf1\ .bDxf3Ex01x90xeax07xe2xd9xaeB`x82'>>> f.close() # closing file object
Copy
写入文件
文件对象提供了以下写入文件的方法。
- 写入:将字符串写入流,并返回写入的字符数。
- writelines(行):向流中写入一个行列表。每行的末尾必须有一个分隔符。
创建新文件并写入
如果新文件不存在或覆盖到现有文件,则创建新文件。
Example: Create or Overwrite to Existing File
代码语言:javascript复制>>> f = open('C:myfile.txt','w')>>> f.write("Hello") # writing to file5>>> f.close()# reading file>>> f = open('C:myfile.txt','r') >>> f.read()'Hello'>>> f.close()
Copy
在上面的例子中,f=open("myfile.txt","w")
语句以写模式打开myfile.txt
,open()
方法返回文件对象并将其分配给变量f
。 'w'
指定文件应该是可写的。 接下来,f.write("Hello")
覆盖myfile.txt
文件的现有内容。它返回写入文件的字符数,在上面的例子中是 5。 最后,f.close()
关闭文件对象。
追加到现有文件
下面通过在open()
方法中传递'a'
或'a '
模式,在现有文件的末尾追加内容。
Example: Append to Existing File
代码语言:javascript复制>>> f = open('C:myfile.txt','a')>>> f.write(" World!")7>>> f.close()# reading file>>> f = open('C:myfile.txt','r') >>> f.read()'Hello World!'>>> f.close()
Copy
写多行
Python 提供了writelines()
方法,将列表对象的内容保存在文件中。 由于换行符不会自动写入文件,因此必须作为字符串的一部分提供。
Example: Write Lines to File
代码语言:javascript复制>>> lines=["Hello world.n", "Welcome to TutorialsTeacher.n"]>>> f=open("D:myfile.txt", "w")>>> f.writelines(lines)>>> f.close()
Copy
以“w”模式或“a”模式打开文件只能写入,不能读取。同样,“r”模式只允许读,不允许写。为了同时执行读取/追加操作,请使用“a ”模式。
写入二进制文件
open()
功能默认以文本格式打开文件。要以二进制格式打开文件,请将'b'
添加到模式参数中。 因此"rb"
模式以二进制格式打开文件进行读取,而"wb"
模式以二进制格式打开文件进行写入。与文本文件不同,二进制文件不可读。使用任何文本编辑器打开时,数据都无法识别。
下面的代码将数字列表存储在二进制文件中。该列表在写入前首先转换为字节数组。内置函数 bytearray() 返回对象的字节表示。
Example: Write to a Binary File
代码语言:javascript复制f=open("binfile.bin","wb")num=[5, 10, 15, 20, 25]arr=bytearray(num)f.write(arr)f.close()