在Python编程中,与本地文件系统进行交互是一项常见且重要的任务。Python提供了多种方式来实现文件和本地磁盘的操作,主要通过内置的 open()
函数、os
模块、shutil
模块以及面向对象的 pathlib
模块。以下将详细介绍这些模块和函数的常见操作。需要注意的是在对文件进行完写入操作之后需要把文件关闭才能真正写入到文件里面。f.close()
一、基本文件操作(open()
函数)
1. 打开与读取文件
在Python中,使用 open()
函数和 with
语句是读取文件的推荐方式,因为 with
语句可以自动管理文件的关闭,避免资源泄漏。
以下是读取文本文件的示例代码:
# 读取文本文件
with open("example.txt", "r", encoding="utf - 8") as f:
content = f.read() # 读取全部内容
lines = f.readlines() # 逐行读取为列表
# 逐行读取(节省内存)
with open("example.txt", "r") as f:
for line in f:
print(line.strip())
2. 写入文件
写入文件有两种常见模式:覆盖写入和追加写入。
覆盖写入示例:
# 覆盖写入(文件不存在则创建)
with open("output.txt", "w", encoding="utf - 8") as f:
f.write("Hello, World!\n")
f.writelines(["Line 1\n", "Line 2\n"])
追加写入示例:
# 追加写入
with open("output.txt", "a") as f:
f.write("Appended text\n")
3. 模式说明
r
:读取模式,为默认模式。w
:覆盖写入模式,如果文件不存在则创建新文件。a
:追加写入模式,在文件末尾添加内容。b
:二进制模式,可与其他模式组合使用,如rb
(二进制读取)、wb
(二进制写入)。+
:读写模式,可与其他模式组合,如r+
(读写)、w+
(读写,先清空文件)。
二、目录和路径操作(os
和 pathlib
)
1. 使用 os
模块(传统方式)
os
模块提供了一系列用于操作目录和路径的函数。
创建目录示例:
import os
# 创建单层目录
os.mkdir("new_dir")
# 创建多层目录
os.makedirs("dir1/dir2", exist_ok=True)
删除文件或目录示例:
# 删除文件
os.remove("file.txt")
# 删除空目录
os.rmdir("empty_dir")
遍历目录内容示例:
# 当前目录所有文件和子目录
files = os.listdir(".")
for file in files:
print(file)
路径拼接示例:
path = os.path.join("folder", "subfolder", "file.txt")
2. 使用 pathlib
(现代面向对象方式)
pathlib
模块提供了一种面向对象的方式来处理文件路径。
创建路径对象示例:
from pathlib import Path
# 创建路径对象
p = Path("folder/file.txt")
创建目录示例:
# 自动创建父目录
p.parent.mkdir(parents=True, exist_ok=True)
读写文件示例:
# 读取文件内容
content = p.read_text(encoding="utf - 8")
# 写入文件内容
p.write_text("New content")
遍历目录示例:
# 遍历当前目录下所有txt文件
for file in Path(".").glob("*.txt"):
print(file.name)
三、高级文件操作(shutil
模块)
shutil
模块提供了一些高级的文件操作功能,如复制、移动和删除目录等。
复制文件示例:
import shutil
# 复制文件
shutil.copy("source.txt", "destination.txt")
复制目录(包含内容)示例:
# 复制目录(包含内容)
shutil.copytree("src_dir", "dst_dir")
移动/重命名文件或目录示例:
# 移动/重命名文件或目录
shutil.move("old_name.txt", "new_name.txt")
删除目录(非空)示例:
# 删除目录(非空)
shutil.rmtree("non_empty_dir")
四、错误处理
在进行文件操作时,为了确保操作的安全性,需要处理常见的异常。
示例代码如下:
try:
with open("missing_file.txt", "r") as f:
print(f.read())
except FileNotFoundError:
print("文件不存在!")
except PermissionError:
print("无权限访问!")
五、常用场景示例
1. 处理 CSV 文件
CSV(逗号分隔值)文件是一种常见的数据存储格式,Python的 csv
模块可以方便地处理 CSV 文件。
读取 CSV 文件示例:
import csv
# 读取 CSV
with open("data.csv", "r") as f:
reader = csv.reader(f)
for row in reader:
print(row)
写入 CSV 文件示例:
# 写入 CSV
with open("output.csv", "w") as f:
writer = csv.writer(f)
writer.writerow(["Name", "Age"])
writer.writerow(["Alice", 30])
2. 处理 JSON 文件
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,Python的 json
模块可以方便地处理 JSON 文件。
读取 JSON 文件示例:
import json
# 读取 JSON
with open("data.json", "r") as f:
data = json.load(f)
print(data["key"])
写入 JSON 文件示例:
data = {"name": "Alice", "age": 30}
with open("output.json", "w") as f:
json.dump(data, f, indent=4) # 格式化输出
六、注意事项
- 路径问题:建议使用
pathlib
或os.path
处理路径,避免手动拼接,以提高代码的可移植性。 - 文件编码:始终明确指定
encoding
(如utf - 8
),避免因编码问题导致的乱码。 - 大文件处理:对于大文件,建议逐行读取或分块读取(如
f.read(4096)
),以节省内存。 - 权限管理:在进行文件操作前,检查文件是否存在(如
Path.exists()
)或是否有写入权限。
通过以上方法,你可以高效、安全地与本地文件系统进行交互。