Python 操作文件和目录
本章节主要讲解 Python 对文件和目录的操作,创建和删除目录,遍历目录,删除非空目录,复制和移动,路径操作,使用os.path处理路径,使用pathlib处理路径,环境变量操作,获取环境变量,设置和删除环境变量,异常处理,实用技巧,获取当前工作目录,检查文件类型,获取文件信息。
1. 文件和目录操作
Python的os
模块提供了丰富的目录操作功能,如创建、删除和遍历目录。
1.1 创建和删除目录
使用os.mkdir()
创建单级目录,os.makedirs()
创建多级目录,os.rmdir()
删除空目录。
import os
# 创建单级目录
os.mkdir('new_folder')
# 创建多级目录
os.makedirs('parent/child/grandchild', exist_ok=True)
# 删除空目录
os.rmdir('new_folder')
说明:exist_ok=True
避免目录已存在时的错误。os.rmdir()
只能删除空目录。
1.2 遍历目录
使用os.listdir()
列出目录内容,os.walk()
递归遍历目录树。
import os
# 列出目录内容
print(os.listdir('.')) # 当前目录下的文件和文件夹
# 递归遍历目录
for root, dirs, files in os.walk('.'):
print(f'当前目录: {root}')
print(f'子目录: {dirs}')
print(f'文件: {files}')
print('-' * 80)
说明:os.walk()
返回三元组:当前目录路径、子目录列表和文件列表,适合处理复杂目录结构。
1.3 删除非空目录
使用shutil
模块删除包含文件的目录。
import shutil
# 删除非空目录
shutil.rmtree('parent', ignore_errors=True)
说明:ignore_errors=True
忽略删除时的错误,如目录不存在。
1.4 复制和移动
shutil
支持文件和目录的复制与移动。
import shutil
# 复制文件
shutil.copy('example.txt', 'example_copy.txt')
# 复制目录
shutil.copytree('parent', 'parent_copy', dirs_exist_ok=True)
# 移动文件或目录
shutil.move('example_copy.txt', 'parent/example_copy.txt')
说明:dirs_exist_ok=True
允许目标目录已存在,适用于Python 3.8+。
2. 路径操作
os.path
和pathlib
模块提供路径处理功能,pathlib
更现代化,推荐使用。
2.1 使用os.path处理路径
os.path
提供路径拼接、分解等功能。
import os
# 拼接路径
path = os.path.join('folder', 'subfolder', 'file.txt')
print(path)
# 获取文件名和目录
print(os.path.basename(path)) # file.txt
print(os.path.dirname(path)) # folder/subfolder
# 检查路径是否存在
print(os.path.exists('example.txt'))
说明:os.path.join()
根据操作系统自动处理路径分隔符(Windows用\\
,Unix用/
)。
2.2 使用pathlib处理路径
pathlib
提供面向对象的路径操作,代码更简洁。
from pathlib import Path
# 创建Path对象
path = Path('folder') / 'subfolder' / 'file.txt'
# 获取文件名和父目录
print(path.name) # file.txt
print(path.parent) # folder/subfolder
# 检查文件是否存在
print(path.exists())
# 创建目录
path.parent.mkdir(parents=True, exist_ok=True)
说明:pathlib
使用/
操作符拼接路径,跨平台兼容,parents=True
支持创建多级目录。
3. 环境变量操作
环境变量是操作系统级别的键值对,Python通过os
模块访问和修改。
3.1 获取环境变量
使用os.environ
获取环境变量。
import os
# 获取单个环境变量
print(os.environ.get('PATH'))
# 获取所有环境变量
for key, value in os.environ.items():
print(f'{key}: {value}')
说明:os.environ.get()
返回None
如果变量不存在,避免KeyError。
3.2 设置和删除环境变量
修改环境变量只影响当前程序的运行时环境。
import os
# 设置环境变量
os.environ['MY_VAR'] = 'my_value'
print(os.environ.get('MY_VAR')) # my_value
# 删除环境变量
del os.environ['MY_VAR']
print(os.environ.get('MY_VAR')) # None
说明:环境变量修改仅在当前进程有效,不会影响系统全局环境。
4. 异常处理
文件和目录操作可能因权限、文件不存在等原因抛出异常,需妥善处理。
import os
try:
with open('nonexistent.txt', 'r', encoding='utf-8') as file:
content = file.read()
except FileNotFoundError:
print('文件不存在!')
except PermissionError:
print('无权限访问文件!')
except Exception as e:
print(f'发生错误: {e}')
说明:捕获具体异常(如FileNotFoundError
)提高代码健壮性,通用Exception
捕获其他未预料错误。
5. 实用技巧
5.1 获取当前工作目录
使用os
或pathlib
获取和更改当前工作目录。
import os
from pathlib import Path
# 获取当前工作目录
print(os.getcwd())
print(Path.cwd())
# 更改当前工作目录
os.chdir('parent')
print(os.getcwd())
5.2 检查文件类型
判断路径是文件还是目录。
from pathlib import Path
path = Path('example.txt')
print(path.is_file()) # True if file exists
print(path.is_dir()) # True if directory exists
5.3 获取文件信息
查看文件大小、修改时间等。
import os
from datetime import datetime
# 获取文件信息
stats = os.stat('example.txt')
print(f'文件大小: {stats.st_size} 字节')
print(f'最后修改时间: {datetime.fromtimestamp(stats.st_mtime)}')
说明:os.stat()
返回文件元数据,datetime.fromtimestamp()
将时间戳转换为可读时间。