os库主要对目标和文件操作
方法 | 描述 |
---|---|
os.name | 返回操作系统类型 |
os.environ | 以字典形式返回系统变量 |
os.putenv(key, value) | 改变或添加环境变量 |
os.listdir(path=’.’) | 列表形式列出目录下所有目录和文件名 |
os.getcwd() | 获取当前路径 |
os.chdir(path) | 改变当前工作目录到指定目录 |
os.mkdir(path [, mode=0777]) | 创建目录 |
os.makedirs(path [, mode=0777]) | 递归创建目录 |
os.rmdir(path) | 移除空目录,不能删除有文件的目录 |
os.remove(path) | 移除文件 |
os.rename(old, new) | 重命名文件或目录 |
os.stat(path) | 获取文件或目录属性 |
os.chown(path, uid, gid) | 改变文件或目录所有者 |
os.chmod(path, mode) | 改变文件访问权限 |
os.symlink(src, dst) | 创建软链接 |
os.unlink(path) | 移除软链接 |
os.getuid() | 返回当前进程UID |
os.getlogin() | 返回登录用户名 |
os.getpid() | 返回当前进程ID |
os.kill(pid, sig) | 返回当前进程ID |
os.kill(pid, sig) | 发送一个信号给进程 |
os.walk(path) | 目录树生成器,生成一个三组(dirpath,dirnames,filenames) |
os.system(command) | 执行shell命令,不能存储结果 |
os.popen(command [, mode='r' [, bufsize]]) | 打开管道来自shell命令,并返回一个文件对象 |
os.path类用于获取文件属性
方法 | 描述 |
---|---|
os.path.basename(path) | 返回最后一个文件或目录名 |
os.path.dirname(path) | 返回最后一个文件所属目录 |
os.path.abspath(path) | 返回一个绝对路径 |
os.path.exists(path) | 判断路径是否存在,返回布尔值 |
os.path.isdir(path) | 判断是否是目录 |
os.path.isfile(path) | 判断是否是文件 |
os.path.islink(path) | 判断是否是链接 |
os.path.ismount(path) | 判断是否挂载 |
os.path.getatime(filename) | 返回文件访问时间戳 |
os.path.getctime(filename) | 返回文件变化时间戳 |
os.path.getmtime(filename) | 返回文件修改时间戳 |
os.path.getsize(filename) | 返回文件大小,单位字节 |
os.path.join(a, *p) | 加入两个或两个以上路径,以正斜杠"/"分隔。常用于拼接路径 |
os.path.split() | 分隔路径名 |
os.path.splitext() | 分隔扩展名 |
shutil 模块
基本用法
1. shutil.copy(src, dst, *, follow_symlinks=True)
将文件从 src
复制到 dst
。
import shutil
# 复制文件
shutil.copy('source.txt', 'destination.txt')
print("文件复制完成:'source.txt' -> 'destination.txt'")
2. shutil.copy2(src, dst, *, follow_symlinks=True)
类似 shutil.copy
,但会复制文件的元数据(如时间戳)。
import shutil
# 复制文件并保留元数据
shutil.copy2('source.txt', 'destination.txt')
print("文件复制完成(包括元数据):'source.txt' -> 'destination.txt'")
3. shutil.copyfile(src, dst, *, follow_symlinks=True)
将 src
文件内容复制到 dst
。
import shutil
# 复制文件内容
shutil.copyfile('source.txt', 'destination.txt')
print("文件内容复制完成:'source.txt' -> 'destination.txt'")
4. shutil.copymode(src, dst, *, follow_symlinks=True)
复制文件的权限,但不包括内容、所有者和组。
import shutil
# 复制文件权限
shutil.copymode('source.txt', 'destination.txt')
print("文件权限复制完成:'source.txt' -> 'destination.txt'")
5. shutil.copystat(src, dst, *, follow_symlinks=True)
复制文件的状态信息,包括权限、最后访问时间和最后修改时间。
import shutil
# 复制文件状态信息
shutil.copystat('source.txt', 'destination.txt')
print("文件状态信息复制完成:'source.txt' -> 'destination.txt'")
6. shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)
递归地复制目录树。
import shutil
# 递归复制目录
shutil.copytree('source_directory', 'destination_directory')
print("目录树复制完成:'source_directory' -> 'destination_directory'")
7. shutil.move(src, dst, copy_function=copy2)
移动文件或目录。
import shutil
# 移动文件或目录
shutil.move('source.txt', 'destination.txt')
print("文件移动完成:'source.txt' -> 'destination.txt'")
8. shutil.rmtree(path, ignore_errors=False, onerror=None)
递归地删除目录树。
import shutil
# 递归删除目录
shutil.rmtree('directory_to_delete')
print("目录树删除完成:'directory_to_delete'")
9. shutil.disk_usage(path)
返回磁盘使用情况。
import shutil
# 获取磁盘使用情况
usage = shutil.disk_usage('/')
print(f"总空间: {usage.total // (2**30)} GB")
print(f"已用空间: {usage.used // (2**30)} GB")
print(f"剩余空间: {usage.free // (2**30)} GB")
10. shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)
定位可执行文件的路径。
import shutil
# 定位可执行文件
path_to_python = shutil.which('python')
print(f"Python可执行文件路径: {path_to_python}")
11. shutil.get_archive_formats()
返回可用的归档格式列表。
import shutil
# 获取可用的归档格式
formats = shutil.get_archive_formats()
print("可用的归档格式:", formats)
12. shutil.make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry_run=False, owner=None, group=None, logger=None)
创建压缩包。
import shutil
# 创建压缩包
shutil.make_archive('archive_name', 'zip', 'directory_to_compress')
print("压缩包创建完成:'directory_to_compress' -> 'archive_name.zip'")
13. shutil.unpack_archive(filename, extract_dir=None, format=None)
解压缩文件。
import shutil
# 解压缩文件
shutil.unpack_archive('archive_name.zip', 'extracted_directory')
print("压缩包解压完成:'archive_name.zip' -> 'extracted_directory'")
14. shutil.get_unpack_formats()
返回可用的解压缩格式列表。
import shutil
# 获取可用的解压缩格式
formats = shutil.get_unpack_formats()
print("可用的解压缩格式:", formats)
15. shutil.register_archive_format(name, function, extra_args=None, description='')
注册一个新的归档格式。
import shutil
# 注册新的归档格式(示例)
def my_archive_format(base_name, base_dir):
print(f"Creating archive {base_name} from {base_dir}")
shutil.register_archive_format('my_format', my_archive_format, description='My custom archive format')
print("自定义归档格式已注册:'my_format'")
16. shutil.unregister_archive_format(name)
取消注册一个归档格式。
import shutil
# 取消注册归档格式
shutil.unregister_archive_format('my_format')
print("自定义归档格式已取消注册:'my_format'")
通过这些函数示例,您可以执行各种高级文件操作,包括文件和目录的复制、移动、删除、创建压缩包和解压缩等。详细的参数和更多用法可以参考官方文档。确保在适当的测试环境中运行这些脚本,并根据需要调整路径和权限。
高级用法
备份文件和目录
import shutil # 导入shutil模块
import os # 导入os模块以处理文件路径
# 定义源目录和备份目录
source_dir = '/path/to/source_dir' # 源目录路径
backup_dir = '/path/to/backup_dir' # 备份目录路径
# 确保备份目录存在,如果不存在则创建
os.makedirs(backup_dir, exist_ok=True)
# 复制目录内容到备份目录
for item in os.listdir(source_dir):
s = os.path.join(source_dir, item) # 拼接源文件路径
d = os.path.join(backup_dir, item) # 拼接目标文件路径
if os.path.isdir(s):
shutil.copytree(s, d, dirs_exist_ok=True) # 递归复制目录
else:
shutil.copy2(s, d) # 复制文件并保留元数据
print('备份完成') # 打印操作完成信息
同步目录
import shutil # 导入shutil模块
from filecmp import dircmp # 导入dircmp以比较目录
# 比较两个目录的不同
def sync_dirs(src, dst):
comparison = dircmp(src, dst) # 比较目录内容
# 复制新的文件和目录到目标目录
for file_name in comparison.left_only:
src_path = os.path.join(src, file_name)
dst_path = os.path.join(dst, file_name)
if os.path.isdir(src_path):
shutil.copytree(src_path, dst_path) # 递归复制目录
else:
shutil.copy2(src_path, dst_path) # 复制文件并保留元数据
print('同步完成') # 打印操作完成信息
source_directory = '/path/to/source_directory' # 源目录路径
target_directory = '/path/to/target_directory' # 目标目录路径
sync_dirs(source_directory, target_directory) # 执行同步操作
处理大文件
import shutil # 导入shutil模块
# 定义大文件路径
file_path = '/path/to/large_file'
chunk_size = 1024 * 1024 # 每次读取1MB
# 读取大文件并进行分块处理
with open(file_path, 'rb') as f:
chunk_number = 0
while True:
chunk = f.read(chunk_size) # 读取一块数据
if not chunk:
break
chunk_file_path = f'/path/to/output_chunk_{chunk_number}.bin'
with open(chunk_file_path, 'wb') as chunk_file:
chunk_file.write(chunk) # 写入到新的分块文件
chunk_number += 1
print('大文件处理完成。') # 打印操作完成信息
复制和移动文件、递归复制目录、删除目录树、创建归档文件等多种文件和目录操作。
参考文献: