跳到主要内容

Python 文件写入

在Python编程中,文件写入是一项基础而重要的技能。通过写入文件,我们可以保存程序的数据输出、配置信息、生成报告等,使数据持久化并可供后续使用。本文将全面介绍Python中的文件写入操作,从基础知识到实际应用,帮助你掌握这一重要技能。

文件写入的基础

在Python中写入文件通常遵循三个基本步骤:

  1. 打开文件(指定写入模式)
  2. 写入数据
  3. 关闭文件

文件的打开模式

Python提供了多种文件打开模式,用于不同的写入需求:

模式描述
'w'写入模式(覆盖已有内容)
'a'追加模式(保留已有内容并在末尾添加)
'x'独占创建模式(仅当文件不存在时创建并写入)
'w+'读写模式(覆盖已有内容)
'a+'追加读写模式
'b'二进制模式(与其他模式结合使用,如'wb'

基本的文件写入操作

使用write()方法

最基本的文件写入方式是使用write()方法:

python
# 创建并写入文本文件
with open('example.txt', 'w') as file:
file.write('Hello, Python!')
file.write('这是第二行文本。') # 注意:这会直接跟在第一行后面,不会自动换行
备注

使用with语句(上下文管理器)可以确保文件在操作完成后自动关闭,即使发生异常也是如此。这是处理文件的推荐方式。

写入多行文本

如果需要写入多行文本,可以使用换行符\n

python
with open('multiline.txt', 'w') as file:
file.write('第一行文本\n')
file.write('第二行文本\n')
file.write('第三行文本\n')

一次写入多行(列表)

更高效地写入多行内容可以使用writelines()方法:

python
lines = ['第一行\n', '第二行\n', '第三行\n']

with open('multiple_lines.txt', 'w') as file:
file.writelines(lines)
警告

writelines()方法不会自动添加换行符,需要在每行末尾手动添加\n

追加内容到文件

如果你想保留文件的现有内容,并在末尾添加新内容,可以使用追加模式'a'

python
# 首先创建一个文件
with open('append_demo.txt', 'w') as file:
file.write('初始内容\n')

# 然后追加内容
with open('append_demo.txt', 'a') as file:
file.write('这是追加的内容\n')
file.write('又追加了一行\n')

结果文件内容:

初始内容
这是追加的内容
又追加了一行

处理不同类型的文件内容

写入数字和其他数据类型

Python的write()方法只接受字符串参数,如果要写入其他数据类型,需要先转换为字符串:

python
with open('numbers.txt', 'w') as file:
file.write(str(42) + '\n') # 写入整数
file.write(str(3.14159) + '\n') # 写入浮点数
file.write(str(True) + '\n') # 写入布尔值

写入格式化文本

使用字符串格式化可以更灵活地组织文件内容:

python
name = "Alice"
age = 30
score = 95.5

with open('formatted.txt', 'w') as file:
file.write(f"姓名:{name}\n")
file.write(f"年龄:{age}\n")
file.write(f"得分:{score:.1f}\n") # 格式化浮点数

# 或者使用format()方法
file.write("姓名:{}\n年龄:{}\n得分:{:.1f}\n".format(name, age, score))

二进制文件写入

有时候需要写入二进制数据,如图片、视频等非文本文件:

python
# 写入二进制数据
data = bytes([65, 66, 67, 68, 69]) # ASCII码表示ABCDE

with open('binary_file.bin', 'wb') as file: # 注意使用'wb'模式
file.write(data)

实际应用案例

案例1:生成简单的日志文件

python
import datetime

def log_activity(message):
"""记录活动日志到文件"""
timestamp = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
log_entry = f"[{timestamp}] {message}\n"

with open('application.log', 'a') as log_file:
log_file.write(log_entry)

# 使用日志函数
log_activity("应用程序启动")
log_activity("用户登录:admin")
log_activity("数据库查询完成")
log_activity("用户注销:admin")

运行后,application.log文件内容类似于:

[2023-08-10 14:23:15] 应用程序启动
[2023-08-10 14:23:15] 用户登录:admin
[2023-08-10 14:23:15] 数据库查询完成
[2023-08-10 14:23:15] 用户注销:admin

案例2:导出数据到CSV文件

python
def export_to_csv(data, filename):
"""将数据导出为CSV文件"""
with open(filename, 'w') as csv_file:
# 写入表头
csv_file.write(','.join(data[0].keys()) + '\n')

# 写入数据行
for row in data:
csv_file.write(','.join(str(value) for value in row.values()) + '\n')

# 示例数据
students = [
{'name': '张三', 'age': 20, 'score': 90},
{'name': '李四', 'age': 21, 'score': 85},
{'name': '王五', 'age': 19, 'score': 92}
]

# 导出数据
export_to_csv(students, 'students.csv')

生成的CSV文件students.csv内容:

name,age,score
张三,20,90
李四,21,85
王五,19,92

案例3:配置文件生成器

python
def create_config_file(config, filename):
"""生成简单的配置文件"""
with open(filename, 'w') as config_file:
for section, options in config.items():
config_file.write(f"[{section}]\n")
for key, value in options.items():
config_file.write(f"{key}={value}\n")
config_file.write("\n") # 在每个部分后添加空行

# 配置数据
app_config = {
'DATABASE': {
'host': 'localhost',
'port': 3306,
'user': 'root',
'password': 'secret',
'name': 'myapp'
},
'SERVER': {
'port': 8080,
'debug': True,
'log_level': 'INFO'
}
}

# 生成配置文件
create_config_file(app_config, 'app.conf')

生成的app.conf配置文件内容:

[DATABASE]
host=localhost
port=3306
user=root
password=secret
name=myapp

[SERVER]
port=8080
debug=True
log_level=INFO

文件写入的最佳实践

  1. 始终使用with语句:确保文件正确关闭,并处理可能的异常

  2. 错误处理:在写入文件时实施异常处理

python
try:
with open('data.txt', 'w') as file:
file.write('一些重要数据')
except IOError as e:
print(f"写入文件时出错: {e}")
  1. 检查磁盘空间:对于写入大文件的应用,考虑预先检查可用磁盘空间

  2. 使用适当的行结束符:根据操作系统选择正确的行结束符,或使用通用模式

python
# 通用换行符模式
with open('platform_independent.txt', 'w', newline='') as file:
file.write('跨平台\n的文本文件')
  1. 缓冲控制:对于频繁写入的场景,可以控制缓冲区大小
python
# 使用较大的缓冲区提高性能
with open('large_file.txt', 'w', buffering=8192) as file:
for i in range(100000):
file.write(f"Line {i}\n")

总结

Python的文件写入功能强大而灵活,掌握这些基本技术将帮助你有效地处理各种文件操作场景:

  • 使用open()函数以适当的模式打开文件
  • 通过write()writelines()方法写入内容
  • 利用不同模式('w', 'a', 'x'等)满足不同需求
  • 处理文本和二进制文件写入
  • 使用with语句确保文件资源正确释放
  • 在实际应用中实践文件写入技术

通过练习本文提供的案例和示例代码,你将能够自信地在Python程序中实现文件写入功能,为你的应用程序增添数据持久化能力。

练习题

  1. 创建一个程序,让用户输入多行文本,然后将这些文本写入文件。
  2. 编写一个函数,接受一个字典并将其内容写入文件,格式为"键=值"的形式。
  3. 创建一个简单的日记应用,支持添加新条目到日记文件中。
  4. 编写一个程序,生成一个包含1到100的平方数的文件。
  5. 实现一个函数,可以将多个文本文件的内容合并到一个新文件中。
提示

记住,实践是掌握文件操作的最佳方式!尝试结合实际项目需求来应用这些技术。