1、文件的操作流程
操作一个文件需要经历以下几个流程:分别是打开文件、读取或写入文件、关闭文件。
2、文件的读取方式
2.1 如何打开一个文件呢?
打开文件我们使用到了 Python 中的 open 方法,其中 open 方法有以下几个参数:
- 文件路径:我们要打开的文件的绝对路径
- 操作类型:表示要对文件进行哪些操作,这里我们有读(r)、写(w)、追加(a)三种
- 读(r):以字母 r 来表示,功能是只能读取文件,并不能对文件进行写入操作。
- 写(w):以字母 w 来表示,读取并向文件中写入内容,但写入前会清空原有内容。
- 追加(a):以字母 a 来表示,能够读取和写入,写入时不会清空内容,而是追加。
- 编码格式:我们这里通常使用 utf-8 来进行编码,Python2 则使用的是 gbk 的格式
# 这里打开了一个名为 test.txt 的文件,并且读取的编码为 UTF-8
f = open("test.txt", "r", encoding="UTF-8")
print(type(f)) # 打印类型:<class '_io.TextIOWrapper'>
print(f) # <_io.TextIOWrapper name='test.txt' mode='r' encoding='UTF-8'>
# 关闭打开的文件
f.close()
【小提示】在文件打开完毕之后要使用 close() 方法将其关闭。
2.1.1 with 关键字简化打开文件方式
我们读取文件也可以通过 with 关键字进行简化。
# 使用 with 方式读取文件,as f2 是起了别名,相当于变量,f2 可用于后续操作
# 有一点,使用了 with 后,我们则不用再写 close 方法,with 会在我们读取完毕文件后自动调用 close 方法关闭
with open("test.txt", "r", encoding="UTF-8") as f2:
for i in f2:
print(i)
2.2 read 方法读取文件内容
- read 方法是基于 open 打开文件对象中的一个读取文件的方法。
- 其功能为读取文件中的内容,默认是读取所有内容。
- 通过 read(10) 方式可读取文件中的前 10 个字符(包括特殊字符)
2.2.1 read 读取所有内容
直接使用文件对象 f.read() 的方式,可实现读取文件中从头到尾所有内容。
# 打开一个文件
f = open("test.txt", "r", "utf-8")
# 读取并输出文件全部内容
print(f.read())
2.2.2 读取指定字符数量
这里通过 read(参数) 的形式实现传参读取文件中从头开始的指定数量的字符,比如我使用了 read(15),则表示要读取文件中前 15 个字符(包括特殊字符回车、换行、空格等)
f = open("test.txt", "r", "utf-8")
print(f.read(10)) # 文件原内容:我是 test.txt 文件,用来读取和写入操作
# 读取前 10 个字符:我是 test.txt 文件
【小知识点】这里 read 方法有一个特殊的读取方式,如果我们基于此文件打开对象调用了两次或多次 read 方法,则第二次读取会接着上次读取到的文件内容位置而向下继续读取。
例如:read(10):这个就表示他读取了文件中前十个字符(包括特殊符号在内的),那么我们在执行 read 时,他就会从文件中第 11 个字符开始向后读取内容,不会在读取前面的内容。
2.3 readlines() 读取所有内容,并将其每行存储为列表。
- readlines 同样是内置的读取文件的方法,他与 read 都可以读取文件所有内容。
- 不同的是 readlines 方法会将读取都的每一行内容存储为一个列表元素,最后返回一个列表。
# 打开文件步骤省略.....
print(f.readlines())
# 以下是文件原内容
# 我是 test.txt 文件,用来读取和写入操作
# 第二行测试内容
# 第三行示例文本
# 第四行结束标记
# 读取之后为 ['我是 test.txt 文件,用来读取和写入操作\n', '第二行测试内容\n', '第三行示例文本\n', '第四行结束标记']
2.4 readline 方法读取单行内容
此方法可用于读取单行的内容,因为一个 readline 他就只读取一行内容。
如果还想读取下一行,可多写几个 readline 或者使用循环来完成读取。
通过以下这个案例我们可以看到文件有四行内容,而我们读取输出了首行。
# 读取文件方式省略.....
print(f.readline())
# 以下是文件原内容
# 我是 test.txt 文件,用来读取和写入操作
# 第二行测试内容
# 第三行示例文本
# 第四行结束标记
# 读取之后输出
# 我是 test.txt 文件,用来读取和写入操作
3、文件的写入操作
- 写入操作主要是使用操作方式中的 w 和 a 模式来实现。
- w 表示写入,a 表示追加。
- 这里新增了一个名为 f.flush() 的方法,作用是刷新文件内容,但现在此功能在 close 中已支持。
【小知识点】文件写入的流程:
- 调用 write 时,会将要写入的内容写入内存的缓冲区。
- 在执行 close 或者 flush 后,会强制将缓冲区的写入内容写入到文件中(也就是磁盘中存储)
- 不执行以上两个方法时,则系统会在缓冲区满后将内容写入文件。
3.1 w 写入模式下的 write 方法
在此模式下,write 方法会先清空文件中原内容,之后再将新的内容写入进去,每次都会清空原内容。
with open("test.txt", "w", encoding="utf-8") as f:
f.write("hello,我是 w 模式下写入的内容")
print(f.read())
# 以下是文件原内容
# 我是 test.txt 文件,用来读取和写入操作
# 第二行测试内容
# 写入后的文件内容(原内容已被 write 清空)
# hello,我是 w 模式下写入的内容
3.2 a 写入模式下的 write 方法
a 模式下,write 不执行清空文件操作,而是会在内容后直接去将内容追加写入(不会自动换行)。
with open("test.txt", "a", encoding="utf-8") as f:
f.write("hello,我是 a 模式下写入的内容")
print(f.read())
# 以下是文件原内容
# 我是 test.txt 文件,用来读取和写入操作
# 第二行测试内容
# 写入后的文件内容(原内容还在,新内容在最后一行内容后追加写入)
# 我是 test.txt 文件,用来读取和写入操作
# 第二行测试内容 hello,我是 a 模式下写入的内容
3.2.1 【小案例】a 模式实现文件的隔行写入
实现在写入时,第 1、3、5 等奇数行写入内容,偶数则执行换行操作。
# 【案例】a 模式的隔行写入
filedir = "test.txt"
f2 = open(filedir, "a", encoding="UTF-8")
# a 模式会将内容追加到文件内容最后一行内容的后面,不换行
i = 0
while i < 10:
f2.write(f"\n我来试一下换行写入的功能{i}")
i += 1
f2.flush()
f2.close()
4、总结
- 学习了通过 open 方法打开文件操作,r 读取、w 清空写入、a 追加最后三种文件操作模式。
- 通过 read(全部)、readline(单行)、readlines(多行列表)方法实现读取内容操作。
- 通过 write 方法实现写入,flush 和 close 实现内容刷新和关闭文件操作。
- 最后完成了一个在 a 模式下实现隔行写入内容的案例。

