跳转至

第九章:文件操作

文件读写

# 读取文件
with open('file.txt', 'r', encoding='utf-8') as f:
    content = f.read()          # 读取全部
    # 或
    lines = f.readlines()       # 读取所有行
    # 或
    for line in f:              # 逐行读取
        print(line.strip())

# 写入文件
with open('file.txt', 'w', encoding='utf-8') as f:
    f.write("Hello, World!\n")
    f.writelines(['line1\n', 'line2\n'])

# 追加写入
with open('file.txt', 'a', encoding='utf-8') as f:
    f.write("追加内容\n")

# 读写模式
with open('file.txt', 'r+', encoding='utf-8') as f:
    content = f.read()
    f.write("新内容")

文件路径

import os
from pathlib import Path

# os.path 方式
os.path.join('dir', 'file.txt')    # 拼接路径
os.path.exists('file.txt')          # 是否存在
os.path.isfile('file.txt')          # 是否文件
os.path.isdir('dir')                # 是否目录
os.path.basename('/path/to/file')   # 文件名
os.path.dirname('/path/to/file')    # 目录名

# pathlib 方式(推荐)
p = Path('dir/subdir/file.txt')
p.name          # 文件名
p.parent        # 父目录
p.suffix        # 扩展名
p.exists()      # 是否存在
p.is_file()     # 是否文件
p.mkdir()       # 创建目录
p.read_text()   # 读取文本
p.write_text()  # 写入文本

目录操作

import os
import shutil

# 创建目录
os.mkdir('new_dir')
os.makedirs('a/b/c', exist_ok=True)

# 删除
os.remove('file.txt')           # 删除文件
os.rmdir('empty_dir')           # 删除空目录
shutil.rmtree('dir')            # 删除目录树

# 遍历目录
for root, dirs, files in os.walk('.'):
    for file in files:
        print(os.path.join(root, file))

# 复制
shutil.copy('src.txt', 'dst.txt')
shutil.copytree('src_dir', 'dst_dir')

CSV 文件

import csv

# 读取 CSV
with open('data.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

# 写入 CSV
with open('output.csv', 'w', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(['name', 'age'])
    writer.writerows([['Alice', 25], ['Bob', 30]])

JSON 文件

import json

# 读取
with open('data.json', 'r') as f:
    data = json.load(f)

# 写入
with open('output.json', 'w') as f:
    json.dump(data, f, indent=2, ensure_ascii=False)