在 Python 中,写入文件有 2 种方式:一种是 “以覆盖方式写入文件”,另一种是 “以追加方式写入文件”。
以 “覆盖” 方式写入文件
在 Python 中,我们可以使用 File 对象的 write() 方法结合 'w' 模式,来以覆盖的方式写入文件。
语法:
# 第 1 步:打开文件,会自动关闭
with open(path, 'w', encoding='utf-8') as file:
# 第 2 步:写入文件
file.write(内容)说明:
与读取文件一样,想要写入文件,首先需要使用 open() 函数打开一个文件,并且获取到 File 对象,接下来才可以写入文件。在 open() 函数中,'w' 表示以覆盖的方式写入文件。
为了测试后面的示例,接下来需要在 data 文件夹中创建一个 hi.txt,其中 hi.txt 的内容如下。
Hi, Python!示例 1:“文件已存在时” 写入文件
mypath = 'data/hi.txt'
# 读取修改前的文件
with open(mypath, 'r', encoding='utf-8') as file:
print('修改前:', file.read())
# 写入文件
with open(mypath, 'w', encoding='utf-8') as file:
file.write('Hi, Java!')
# 读取修改后的文件
with open(mypath, 'r', encoding='utf-8') as file:
print('修改后:', file.read())运行结果如下。
修改前:Hi, Python!
修改后:Hi, Java!分析:
当我们第 2 次读取文件时,发现文件的内容已经被修改了。或者直接打开 hi.txt 这个文件,也可以看到内容已经被修改了,是不是觉得非常神奇呢?
不管是读取文件还是写入文件,我们都需要使用 open() 函数。由于我们使用了强烈推荐的 with open(...) 语句,因此在缩进内的文件操作完成后,Python 会自动帮我们安全地关闭文件,而无需再手动调用 close() 方法!
示例 2:“文件不存在时” 写入文件
mypath = 'data/welcome.txt'
# 写入文件
with open(mypath, 'w', encoding='utf-8') as file:
file.write('欢迎来到绿叶网!')
# 读取文件
with open(mypath, 'r', encoding='utf-8') as file:
print(file.read())运行结果如下。
欢迎来到绿叶网!分析:
welcome.txt 这个文件一开始是不存在的。对于写模式 'w',如果文件不存在,则 Python 会创建一个文件,并且把内容写入新创建的文件中。
以 “追加” 方式写入文件
在 Python 中,我们可以使用 File 对象的 write() 方法结合 'a' 模式,来以追加的方式写入文件。
语法:
# 第 1 步:打开文件,会自动关闭
with open(path, 'a', encoding='utf-8') as file:
# 第 2 步:写入文件
file.write(内容)说明:
这两种写入文件的方式,使用的都是 File 对象的 write() 方法,唯一的区别在于选取的模式不同,也就是 open() 函数的第 2 个参数不一样。其中,以覆盖方式写入文件使用的是 'w',而以追加方式写入文件使用的是 'a'。
对于文件操作,常见的操作模式如下表所示。
| 模式 | 说明 |
|---|---|
| r | 读纯文本文件 |
| w | 写纯文本文件 |
| a | 追加内容 |
| rb | 读二进制文件 |
| wb | 写二进制文件 |
r 指的是 “read(读)”,w 指的是 “write(写)”,a 指的是 “append(追加)”。
为了测试后面的示例,接下来需要在 data 文件夹中创建一个 book.txt,其中 book.txt 的内容如下。
绿叶网示例 3:追加内容写入文件
mypath = 'data/book.txt'
# 读取修改前的文件
with open(mypath, 'r', encoding='utf-8') as file:
print('修改前:', file.read())
# 写入文件
with open(mypath, 'a', encoding='utf-8') as file:
file.write(' Python 教程')
# 读取修改后的文件
with open(mypath, 'r', encoding='utf-8') as file:
print('修改后:', file.read())运行结果如下。
修改前:绿叶网
修改后:绿叶网 Python 教程分析:
book.txt 这个文件一开始的内容是 "绿叶网",然后以追加的方式写入文件后,内容就变为 “绿叶网 Python 教程” 了。
