Python文件与目录操作管理详解
文章目录
- Python文件与目录操作管理详解
- 一、文件操作基础
- 1. 文件操作的基本流程
- 2. 文件打开模式
- 3. 基本文件操作代码示例
- 二、目录操作
- 1. 常用目录操作函数
- 2. 目录操作代码示例
- 三、路径操作
- 1. 路径操作对比
- 2. 路径操作代码示例
- 四、高级文件操作
- 1. 文件复制、移动和删除
- 2. 文件信息获取
- 五、临时文件和目录
- 六、文件遍历与查找
- 1. 遍历目录
- 2. 文件查找
- 七、文件编码处理
- 八、最佳实践总结
Python文件与目录操作管理详解
文件与目录操作是编程中非常基础但重要的功能,Python提供了多种方式来处理文件和目录。下面我将用通俗易懂的方式,结合代码示例和图表,为你全面讲解Python中的文件与目录操作。
一、文件操作基础
1. 文件操作的基本流程
文件操作通常遵循"打开→操作→关闭"的流程:
[打开文件] → [读取/写入] → [关闭文件]
2. 文件打开模式
Python中使用open()
函数打开文件,可以指定不同的模式:
模式 | 描述 | 文件存在 | 文件不存在 |
---|---|---|---|
‘r’ | 只读 | 正常打开 | 报错 |
‘w’ | 写入 | 清空内容 | 创建新文件 |
‘a’ | 追加 | 保留内容 | 创建新文件 |
‘x’ | 创建 | 报错 | 创建新文件 |
‘b’ | 二进制模式 | 与其他模式组合使用 | |
‘t’ | 文本模式(默认) | 与其他模式组合使用 | |
‘+’ | 读写模式 | 与其他模式组合使用 |
3. 基本文件操作代码示例
# 写入文件
with open('example.txt', 'w') as f:f.write("Hello, World!\n")f.write("这是第二行内容")# 读取文件
with open('example.txt', 'r') as f:content = f.read() # 读取全部内容print(content)# 按行读取
with open('example.txt', 'r') as f:for line in f: # 逐行读取print(line.strip()) # strip()去掉行尾换行符
二、目录操作
Python中目录操作主要通过os
和pathlib
模块实现。
1. 常用目录操作函数
操作 | os模块 | pathlib.Path |
---|---|---|
创建目录 | os.mkdir() | Path.mkdir() |
递归创建 | os.makedirs() | Path.mkdir(parents=True) |
删除目录 | os.rmdir() | Path.rmdir() |
递归删除 | shutil.rmtree() | 无直接方法 |
列出目录 | os.listdir() | Path.iterdir() |
路径拼接 | os.path.join() | / 运算符或Path.joinpath() |
判断存在 | os.path.exists() | Path.exists() |
2. 目录操作代码示例
import os
from pathlib import Path# 使用os模块
os.mkdir('test_dir') # 创建目录
print(os.listdir('.')) # 列出当前目录内容
os.rmdir('test_dir') # 删除目录# 使用pathlib模块(更现代的方式)
path = Path('test_dir')
path.mkdir(exist_ok=True) # 创建目录,exist_ok=True避免已存在时报错
print([p.name for p in path.parent.iterdir()]) # 列出父目录内容
path.rmdir() # 删除目录
三、路径操作
处理文件路径是文件操作中的常见需求。
1. 路径操作对比
需求 | os.path | pathlib.Path |
---|---|---|
获取文件名 | os.path.basename(path) | Path(path).name |
获取目录 | os.path.dirname(path) | Path(path).parent |
拼接路径 | os.path.join(a, b) | Path(a)/b |
获取绝对路径 | os.path.abspath(path) | Path(path).absolute() |
判断文件 | os.path.isfile(path) | Path(path).is_file() |
判断目录 | os.path.isdir(path) | Path(path).is_dir() |
2. 路径操作代码示例
from pathlib import Path# 创建Path对象
p = Path('/home/user/documents/report.txt')# 获取各部分
print(p.name) # 'report.txt'
print(p.stem) # 'report' (不带后缀的文件名)
print(p.suffix) # '.txt' (文件扩展名)
print(p.parent) # '/home/user/documents'# 路径拼接
new_p = p.parent / 'backup' / p.name
print(new_p) # '/home/user/documents/backup/report.txt'# 判断路径类型
print(p.is_file()) # 是否是文件
print(p.is_dir()) # 是否是目录
四、高级文件操作
1. 文件复制、移动和删除
import shutil
from pathlib import Path# 复制文件
shutil.copy('source.txt', 'destination.txt')# 复制目录(递归)
shutil.copytree('source_dir', 'destination_dir')# 移动/重命名文件或目录
shutil.move('old_name.txt', 'new_name.txt')# 删除文件
Path('file_to_delete.txt').unlink() # 或者 os.remove()# 递归删除目录
shutil.rmtree('directory_to_delete')
2. 文件信息获取
from pathlib import Path
import timep = Path('example.txt')# 获取文件大小(字节)
size = p.stat().st_size
print(f"文件大小: {size} 字节")# 获取修改时间
mtime = p.stat().st_mtime
print(f"修改时间: {time.ctime(mtime)}")# 获取创建时间(Windows)
ctime = p.stat().st_ctime
print(f"创建时间: {time.ctime(ctime)}")
五、临时文件和目录
Python可以方便地创建临时文件和目录:
import tempfile# 创建临时文件
with tempfile.NamedTemporaryFile(delete=False) as tmp:print(f"临时文件路径: {tmp.name}")tmp.write(b"临时内容")# 创建临时目录
with tempfile.TemporaryDirectory() as tmpdir:print(f"临时目录路径: {tmpdir}")# 在这里使用临时目录
# 退出with块后临时目录自动删除
六、文件遍历与查找
1. 遍历目录
from pathlib import Path# 递归遍历目录
for item in Path('.').rglob('*'):print(item)# 非递归遍历
for item in Path('.').iterdir():if item.is_file():print(f"文件: {item}")elif item.is_dir():print(f"目录: {item}")
2. 文件查找
from pathlib import Path# 查找所有.py文件
py_files = list(Path('.').glob('*.py'))
print(py_files)# 递归查找所有.txt文件
txt_files = list(Path('.').rglob('*.txt'))
print(txt_files)
七、文件编码处理
处理不同编码的文件:
# 读取GBK编码文件
with open('gbk_file.txt', 'r', encoding='gbk') as f:content = f.read()# 写入UTF-8文件
with open('utf8_file.txt', 'w', encoding='utf-8') as f:f.write("这是UTF-8编码的内容")
八、最佳实践总结
- 优先使用pathlib:比os.path更现代、更面向对象
- 使用with语句:确保文件正确关闭
- 处理异常:文件操作可能失败(权限、不存在等)
- 注意路径跨平台:Windows用
\
,Linux/macOS用/
,pathlib会自动处理 - 大文件处理:避免一次性读取大文件,使用逐行或分块读取
# 良好实践示例
from pathlib import Pathfile_path = Path('data') / 'large_file.txt'
try:with open(file_path, 'r', encoding='utf-8') as f:for line in f:process_line(line) # 逐行处理大文件
except FileNotFoundError:print(f"文件 {file_path} 不存在")
except PermissionError:print(f"没有权限访问 {file_path}")
通过以上内容,你应该对Python中的文件和目录操作有了全面的了解。记住实践是最好的学习方式,多写代码来巩固这些知识!