文件处理库的基本功能

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('大文件处理完成。')  # 打印操作完成信息

复制和移动文件、递归复制目录、删除目录树、创建归档文件等多种文件和目录操作。

参考文献:

https://www.cnblogs.com/scajy/p/17048695.html

python os - 刘江的python教程

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值