在 Python 中,写入文件是一个非常基础且重要的操作,下面我将为你详细解释如何使用 Python 写入文件,从最基础的方法到更高级的实践。

核心概念
在 Python 中,所有文件操作都围绕内置的 open() 函数展开,这个函数会返回一个文件对象,然后你就可以通过这个对象来读写文件。
open() 函数的基本语法是:
open(file, mode='r', encoding=None)
file: 你要操作的文件名(或路径)。mode: 文件打开模式,对于写入文件,我们主要使用以下几种:'w'(Write): 写入模式,如果文件存在,则清空文件内容;如果文件不存在,则创建新文件。'a'(Append): 追加模式,如果文件存在,则在文件末尾追加内容;如果文件不存在,则创建新文件。'x'(Exclusive creation): 排他创建模式,只能用于创建新文件,如果文件已存在,会抛出FileExistsError错误。
encoding: 字符编码,在处理中文时,强烈建议使用'utf-8',以避免乱码问题。
基础写入:使用 with open 语句
这是最推荐的方式,因为它能确保文件在操作完成后被自动关闭,即使发生错误也不例外。
示例 1:使用 'w' 模式(覆盖写入)
# 要写入的内容
content = "你好,世界!\n"
content += "这是我的第一个 Python 写入文件程序,\n"
content += "很高兴见到你!"
# 使用 'w' 模式写入文件
# 'my_file.txt' 已存在,它里面的内容会被清空
# 如果不存在,则会创建这个新文件
try:
with open('my_file.txt', 'w', encoding='utf-8') as f:
f.write(content)
print("文件写入成功!")
except IOError as e:
print(f"写入文件时出错: {e}")
# 打开 'my_file.txt' 你会看到上面写入的内容
示例 2:使用 'a' 模式(追加写入)
如果你想在不删除已有内容的情况下向文件添加新内容,应该使用 'a' 模式。

# 要追加的内容
new_line = "\n这是追加到文件末尾的一行新内容。"
# 使用 'a' (append) 模式打开文件
try:
with open('my_file.txt', 'a', encoding='utf-8') as f:
f.write(new_line)
print("内容追加成功!")
except IOError as e:
print(f"追加内容时出错: {e}")
# 再次打开 'my_file.txt',你会发现新内容被添加在了原文的末尾
写入多行数据:writelines() 方法
如果你有一个包含多行字符串的列表,可以使用 writelines() 方法一次性写入,这比循环调用 write() 更高效。
注意:writelines() 不会自动在每行末尾添加换行符 \n,你需要自己处理。
lines_to_write = [
"这是第一行,\n",
"这是第二行,\n",
"这是第三行,\n"
]
try:
with open('multiline_file.txt', 'w', encoding='utf-8') as f:
f.writelines(lines_to_write)
print("多行文件写入成功!")
except IOError as e:
print(f"写入多行文件时出错: {e}")
高级写入:使用 print() 函数
你可能想不到,print() 函数也可以用来写入文件!它有一个 file 参数,可以指定一个文件对象。
print() 的好处是它会自动为你处理换行符和空格,非常方便。

# 创建一个文件对象
try:
with open('print_output.txt', 'w', encoding='utf-8') as f:
# 使用 print 的 file 参数将内容写入文件
print("使用 print 函数写入第一行。", file=f)
print("这是第二行,", "并且可以轻松地", "连接多个字符串。", file=f)
# print 默认会在末尾加一个换行符
print("这是第三行。", file=f)
print("使用 print 函数写入文件成功!")
except IOError as e:
print(f"使用 print 写入时出错: {e}")
处理异常和文件路径
异常处理
文件操作可能会因为各种原因失败,比如磁盘已满、没有写入权限等,使用 try...except 块来捕获 IOError (或更具体的 OSError) 是一个好习惯。
file_path = 'important_data.txt'
data = "这是一些重要的数据。"
try:
with open(file_path, 'w', encoding='utf-8') as f:
f.write(data)
print(f"成功将数据写入 {file_path}")
except PermissionError:
print(f"错误:没有权限写入文件 {file_path}")
except FileNotFoundError:
print(f"错误:路径 {file_path} 不存在或无法访问")
except Exception as e:
print(f"发生未知错误: {e}")
文件路径
- 相对路径:如
'my_file.txt',文件会创建在当前 Python 脚本所在的目录下。 - 绝对路径:如
C:/Users/YourUser/Documents/my_file.txt(Windows) 或/home/youruser/documents/my_file.txt(Linux/macOS),使用绝对路径可以确保文件被写入到指定位置。
在 Windows 中,路径中的反斜杠 \ 是转义字符,所以推荐使用正斜杠 或在字符串前加 r (raw string),r'C:\path\to\file.txt'。
总结与最佳实践
| 任务 | 推荐方法 | 说明 |
|---|---|---|
| 写入文本文件 | with open(..., 'w', encoding='utf-8') as f: |
首选方法,安全、简洁。'w' 会覆盖。 |
| 追加文本到文件 | with open(..., 'a', encoding='utf-8') as f: |
在文件末尾添加内容,不会覆盖已有内容。 |
| 写入多行列表 | f.writelines(list_of_lines) |
比 for 循环 write() 更高效,记得自己加 \n。 |
| 格式化写入 | print(..., file=f) |
适合需要自动处理换行和分隔符的场景。 |
| 处理JSON数据 | json.dump(data, f) |
使用 json 模块,确保数据格式正确。 |
| 处理CSV数据 | csv.writer(f).writerows(rows) |
使用 csv 模块,处理表格数据。 |
希望这个详细的指南能帮助你完全掌握 Python 的文件写入操作!如果你有更具体的需求,比如写入特定格式的数据(如 JSON、CSV),可以随时再提问。
