如何在 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+'