如何在 Python 中进行文件的写入和读取
Posted on Wed, 25 Dec 2024 16:10:28 +0800 by LiangMingJian
如何在 Python 中进行文件的写入和读取
文件的打开
打开一个文件需要用 open()
方法,open()
会返回一个可迭代的文件对象:
>>> f = open('test.txt', 'r')
r 表示是文本文件,rb 是二进制文件,函数默认值为 r。
如果文件不存在,open()
函数就会抛出一个 IOError
的错误,并且给出错误码和详细的信息告诉你文件不存在:
>>> f=open('test.txt', 'r')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,且操作系统同一时间能打开的文件数量也是有限的。
>>> f.close()
由于文件读写时都有可能产生IOError
,一旦出错,后面的f.close()
就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,Python 引入了with
语句来自动帮我们调用close()
方法:
with open('/path/to/file', 'r') as f:
print(f.read())
文件的读取
python 文件对象提供了三个读方法: read()、readline()、readlines()
,每种方法可以接受一个变量以限制每次读取的数据量。
read()
会读取整个文件,并将文件内容放到一个字符串变量中。注意,如果文件大于可用内存,则程序可能会报错,因此,为了保险起见,可以通过调用read(size)
方法,指定每次最多读取 size 个字节的内容。readlines()
会读取整个文件,像read()
一样,但是readlines()
会自动将文件内容分析成一个行的列表,该列表可以进行迭代。readline()
每次只读取一行,并将结果放入一个字符串变量中。
PS:上述三种方法都会把每行末尾的\n
也一并读取。
使用写入模式打开文件
在调用open()
函数时,传入标识符'w'
或者'wb'
表示写文本文件或写二进制文件:
>>> f = open('test.txt', 'w') # 若是'wb'就表示写二进制文件
>>> f.write('Hello, world!')
>>> f.close()
PS:'w'
模式打开文件时,如果路径没有这个文件,程序就会自动创建一个;如果有,那么程序会把原文件的内容清空后再写入新的东西。如果不想清空原来的内容而是直接在后面追加新的内容,需要使用'a'
模式。
我们可以反复调用write()
来写入文件,但是务必调用f.close()
来关闭文件。因为当我们写文件时,系统往往不会立刻把数据写入磁盘,而是放到内存缓存起来,等到空闲时再慢慢写入。只有调用close()
方法时,系统才保证把没有写入的数据全部写入磁盘。
文件的写入
python文件对象提供了两个写方法: write()、writelines()
。
write()
方法和read()、readline()
方法对应,是将字符串写入到文件中。writelines()
方法和readlines()
方法对应,也是针对列表的操作。它接收一个字符串列表作为参数,将他们写入到文件中。注意的是,writelines()
不会自动加入换行符,因此,需要显式加入。
关于 open()
的 mode 参数
'r'
:读'w'
:写'a'
:追加'r+' == r+w
:(可读可写,文件若不存在就报错(IOError))'w+' == w+r
:(可读可写,文件若不存在就创建)'a+' ==a+r
:(可追加可写,文件若不存在就创建)
PS:如果是二进制文件,只需在后面添加b
,'rb' 'wb' 'ab' 'rb+' 'wb+' 'ab+'