====== 第十八章:文件操作 ======
===== 本章目标 =====
完成本章学习后,你将能够:
* 读写文本文件和二进制文件
* 使用上下文管理器
* 掌握文件系统操作
* 处理CSV、JSON等格式
===== 文件读写基础 =====
==== 打开文件 ====
# 基本语法
f = open('file.txt', 'r', encoding='utf-8')
content = f.read()
f.close()
# 使用with语句(推荐)
with open('file.txt', 'r', encoding='utf-8') as f:
content = f.read()
# 自动关闭文件
==== 读取模式 ====
# 读取整个文件
with open('file.txt', 'r', encoding='utf-8') as f:
content = f.read() # 返回字符串
# 按行读取
with open('file.txt', 'r', encoding='utf-8') as f:
for line in f:
print(line.strip())
# 读取为列表
with open('file.txt', 'r', encoding='utf-8') as f:
lines = f.readlines()
# 逐行读取(大文件)
with open('file.txt', 'r', encoding='utf-8') as f:
while True:
line = f.readline()
if not line:
break
print(line.strip())
==== 写入模式 ====
# 写入(覆盖)
with open('output.txt', 'w', encoding='utf-8') as f:
f.write('Hello, World!\n')
f.write('Second line\n')
# 追加
with open('log.txt', 'a', encoding='utf-8') as f:
f.write('New log entry\n')
# 写入多行
lines = ['Line 1\n', 'Line 2\n', 'Line 3\n']
with open('output.txt', 'w', encoding='utf-8') as f:
f.writelines(lines)
===== 文件系统操作 =====
import os
import shutil
# 路径操作
print(os.path.join('folder', 'file.txt')) # folder/file.txt
print(os.path.abspath('file.txt'))
print(os.path.dirname('/path/to/file.txt'))
print(os.path.basename('/path/to/file.txt'))
print(os.path.splitext('file.txt')) # ('file', '.txt')
# 文件/目录操作
os.mkdir('new_folder') # 创建目录
os.makedirs('a/b/c', exist_ok=True) # 递归创建
os.remove('file.txt') # 删除文件
os.rmdir('empty_folder') # 删除空目录
shutil.rmtree('folder') # 删除目录及内容
shutil.copy('src.txt', 'dst.txt') # 复制文件
shutil.move('src.txt', 'dst/') # 移动文件
# 遍历目录
for root, dirs, files in os.walk('.'):
for file in files:
print(os.path.join(root, file))
===== 处理不同文件格式 =====
==== JSON ====
import json
data = {'name': 'Alice', 'age': 25, 'hobbies': ['reading', 'coding']}
# 写入JSON
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
# 读取JSON
with open('data.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)
# 字符串转换
json_str = json.dumps(data, indent=2)
parsed = json.loads(json_str)
==== CSV ====
import csv
# 写入CSV
with open('data.csv', 'w', newline='', encoding='utf-8') as f:
writer = csv.writer(f)
writer.writerow(['Name', 'Age', 'City'])
writer.writerow(['Alice', 25, 'NYC'])
writer.writerow(['Bob', 30, 'LA'])
# 读取CSV
with open('data.csv', 'r', encoding='utf-8') as f:
reader = csv.reader(f)
for row in reader:
print(row)
# 字典方式
with open('data.csv', 'r', encoding='utf-8') as f:
reader = csv.DictReader(f)
for row in reader:
print(row['Name'], row['Age'])
===== 本章练习 =====
1. 实现文件复制工具
2. 实现日志文件分析器
3. 实现目录同步工具
4. 实现配置文件管理器
下一章:[[python_course:chapter19|第十九章:异常处理]]