shutill模块

1. copy复制

copyfileobj(fsrc, fdst[, length])文件对象的复制,fsrt 和fdst是open打开色文件对象,复制内容,fdst要求可写。length指定了表示buffer的大小。
copyfile(src, dst, *, follow_symlinks=True),复制文件内容不含元数据,src、dst为文件的路径字符串,本质上调用的是copyfileobj,所以不带元数据二进制内容复制。
copymode(src, dst, *, follow_symlinks=True),仅仅复制权限。
copystat(src, dst, *, follow_symlinks=True)复制元数据,stat包含权限。
copy(src, dst, *, follow_symlinks=True),复制文件内容、权限、部分元数据,不包括创建时间和修改时间。本质上调用的是copyfile(src, dst, *, follow_symlinks=True),copymode(src, dst, *, follow_symlinks=True)
copy2(src, dst, *, follow_symlinks=True),比copy多了复制全部元数据,但需要平台支持。本质上调用的是copyfile(src, dst, *, follow_symlinks=True),copystat(src, dst, *, follow_symlinks=True)。
copytree(src, dst, *, follow_symlinks=False, ignore=None, copy_function=copy2)
递归复制目录,默认使用copy2,也就是带更多的元数据复制。src和dst必须是目录,src必须存在,dst必须不存在。

# shutil模块
import shutil
from pathlib import Path

with open('C:/Users/administrator/test.txt', 'r+') as f1:  # w+模式写入文件后,文件指针在EOF
    f1.write('abcde\n12345')  # 文件复制最好用二进制模式,不需要考虑编码问题
    f1.flush()
    f1.seek(0)  # 如果没有此语句,f1.read读取的内容为空,所以f2中没有任何内容
    with open('C:/Users/administrator/test1.txt', 'w+') as f2:
        # f2.write(f1.read())
        shutil.copyfileobj(f1, f2)


shutil.copyfile('C:/Users/administrator/test.txt', 'C:/Users/administrator/test1.txt')
# copyfile的问题是,只是复制了内容,并没有复制权限
# copymode仅仅是复制权限
shutil.copy('C:/Users/administrator/test.txt', 'C:/Users/administrator/test1.txt')

p1 = Path('c:/a/b/c/d/e.zip')
p1.parent.mkdir(parents=True, exist_ok=True)

with p1.open('w+') as f:
    f.write('abcd\n1234')


def ignore(names, src):
    # s = set()
    # for name in names:
    #     if names.startswith('e'):
    #         s.add(name)
    # return s
    # return {name for name in names if names.startswith('e')}
    return set(filter(lambda x: x.startswith('e'), names))  # 这个返回值是惰性的,应该学习源码,转换成set


# shutil.copytree('c:/a', 'c:/dest', ignore=ignore, copy_function=shutil.copy)

shutil.move('c:/a/b', 'c:/a/t')
shutil.rmtree('c:/dest')

rm删除

shutil.rmtree(path, ignore_errors= False, οnerrοr=None)
递归删除,如同rm -rf 一样危险,慎用。
他不是原子操作,有可能删除错误,已经删除的就删除了。
ignore_errors为True,忽略错误,当为False 或者omitted时onerror生效。
onerror为callable,接收函数function、path、execinfo

move移动

move(src, dst, copy_function=copy2)
递归移动文件、目录到目标,返回目标。
本身使用的是os.rename方法。
如果不支持rename,如果是目录则copytree再删除源目录。
默认使用copy2方法。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值