如何在 Python 中进行文件的写入和读取

Posted on Wed, 25 Dec 2024 16:10:28 +0800 by LiangMingJian


文件的打开

打开一个文件需要用 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+'