Skip to content

在Python程序中,不管使用哪一类文件,都要经过3个步骤: 打开文件、读写文件和关闭文件。 Python语言有相应的函数来实现打开、读、写、关闭等文件操作。

1. 文件函数

文件访问的目的是读或者写文件内容,在Python操作文件时,首先要打开文件,然后在操作完成后,还要关闭文件,一定要保持结束关闭的的编程习惯。
基础函数:

函数说明
open打开或新建文件,并返回文件操作对象
read将文件内容读取到内存
write将指定内容写入文件
close关闭文件
readline从文件中读取一行内容
readlines读取文件的所有行,并将每一行作为一个元素存储在一个列表中返回

其中,open函数负责打开文件,并返回文件对象;而read、write、close都需要通过文件对象来调用;

其他函数:

函数说明
seek移动文件指针的位置

2. open函数

open函数可以打开一个已经存在的文件或者创建一个新的文件

python
# 语法
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
  • file:这是必需参数,代表要打开的文件的路径(可以是绝对路径,也可以是相对路径);
  • mode:可选参数,用来指定文件的打开模式,默认值是 'r',也就是以只读模式打开文件;
  • buffering:可选参数,用于设置缓冲策略;
  • encoding:可选参数,指定文件的编码格式,例如 'utf-8'、'gbk' 等;
  • errors:可选参数,用于指定如何处理编码错误,例如 'ignore' 表示忽略错误,'strict' 表示遇到错误抛出异常(默认值);
  • newline:可选参数,控制通用换行符模式的工作方式,可取值为 None、''、'\n'、'\r'、'\r\n' 等;
  • closefd:可选参数,若设为 False,在文件关闭时,底层文件描述符不会关闭。默认值为 True;
  • opener:可选参数,用于自定义开启器;

3. write函数

write() 方法用于向文件中写入字符串(在文本模式下)或字节串(在二进制模式下)。 语法:

python
file.write(string)  # 文本模式
file.write(bytes)   # 二进制模式

其中,file 是通过 open() 函数打开的文件对象,string 是要写入的字符串,bytes 是要写入的字节串。 write() 方法会返回实际写入的字符数(文本模式)或字节数(二进制模式)。

注意事项:

  • 在文本模式下,写入的内容必须是字符串类型;在二进制模式下,写入的内容必须是字节串类型。
  • 如果以写入模式('w')打开文件,会覆盖文件中原有的内容;如果以追加模式('a')打开文件,则会在文件末尾添加新的内容。

4. read函数

read() 方法用于从文件中读取指定数量的字符(文本模式)或字节(二进制模式)。如果不指定参数,它会读取文件的全部内容。 语法:

python
file.read(num)

其中,num表示从文件中读取的数据数量,此处指的是字符数,而不是字节数,这意味着当你读取中文文本时,num 代表的是汉字的数量(也包含其他字符,如标点符号等)。 示例:

python
file_object1 = open('my_file_multiline.txt', 'r', encoding='utf-8')
# 读取文件中所有数据
content1 = file_object1.read()
print(content1)
# 读取文件中部分数据
file_object1.seek(0)
content11 = file_object1.read(12)
print(content11)

5. readline函数

readline() 方法用于从文件中读取一行内容,每次调用该方法,文件指针会移动到下一行的开头。如果已经到达文件末尾,会返回一个空字符串。
语法:

python
file.readline(size=-1)

其中 size 是可选参数,表示最多读取的字符或字节数。如果 size 为负数或未指定,会读取整行内容。 示例:

python
file_object1.seek(0)
content_line1 = file_object1.readline(-1)
print(content_line1)
content_line2 = file_object1.readline(5)
print(content_line2)
content_line3 = file_object1.readline()
print(content_line3)

对应输出:

text
明月几时有,把酒问青天。

不知天上宫
阙,今夕是何年。

6. readlines函数

readlines() 方法用于读取文件的所有行,并将每一行作为一个元素存储在一个列表中返回。

python
file.readlines(hint=-1)

其中, hint 是可选参数,表示大约读取的字节数。如果 hint 为负数或未指定,会读取整个文件。 示例:

python
file_object1.seek(0)
lines = file_object1.readlines()
print(lines)

输出:

text
['明月几时有,把酒问青天。\n', '不知天上宫阙,今夕是何年。\n', '我欲乘风归去,又恐琼楼玉宇,\n', '高处不胜寒。起舞弄清影,何似在人间。\n', '转朱阁,低绮户,照无眠。\n', '不应有恨,何事长向别时圆?\n', '人有悲欢离合,月有阴晴圆缺,此事古难全。\n', '但愿人长久,千里共婵娟。']
  • read() 适合一次性读取小文件的全部内容。
  • readline() 适合逐行处理大文件,能有效控制内存使用。
  • readlines() 适合一次性获取文件所有行并进行遍历操作,但对于大文件可能会有内存压力。

7. close函数

close() 方法用于关闭文件对象。关闭文件后,就不能再对该文件对象进行读写操作。 语法:

python
file.close()

其中,file 是通过 open() 函数打开的文件对象。

8. seek函数

在 Python 中,当你使用 open() 函数打开一个文件后,会得到一个文件对象。 这个文件对象内部维护着一个文件指针,它标记着当前读写操作在文件中的位置。
如果你已经对文件进行了读取或写入操作,文件指针会随着操作移动。 例如,当你使用 read() 方法读取了一定数量的字符后,文件指针会移动到读取结束的位置; 使用 write() 方法写入内容后,文件指针也会移动到写入内容的末尾。

python
file.seek(offset, whence=0)

seek是文件对象的一个方法,用于移动文件指针的位置。 其中:

  • offset 表示要移动的字节数。正数表示向文件末尾方向移动,负数表示向文件开头方向移动。
  • whence 是可选参数,用于指定从哪个位置开始计算偏移量,它有三个可选值:
    • 0:从文件开头开始计算偏移量(默认值)。
    • 1:从当前文件指针位置开始计算偏移量。
    • 2:从文件末尾开始计算偏移量。

当调用 file.seek(0) 时,实际上是 file.seek(0, 0) 的简写, 它的作用是将文件指针移动到文件的开头。 这在你需要重新读取文件内容或者在文件开头进行写入操作时非常有用。