python-shutil模块

shutil模块用于文件拷贝,包括文件内容,文件权限等信息

一、copy

1. copyfileobj(fsrc, fdst, length=16*1024)

文件对象的复制,fsrc和fdst是打开的文件对象,复制内容,fdst要求可写

length指定了表示buffer的大小

import shutil

# shutil.copyfileobj()

with open('D:/test_liujj/test1', 'r+') as f1:
    f1.write('abcd\n1234')
    f1.flush()
    f1.seek(0)
    with open('D:/test_liujj/test2', 'w+') as f2:
        shutil.copyfileobj(f1,f2)
2. copyfile(src, dst, *, follow_symlinks=True)

复制文件内容,不含元数据,src和dst为文件的路径字符串

目标文件如果有内容,会被清空重新写入

本质上是调用copyfileobj,所以不带元数据二进制内容复制


# copyfile 复制文件
shutil.copyfile('D:/test_liujj/test1','D:/test_liujj/test2')
3. copymode(src, dst, *, follow_symlinks=True)

仅复制权限

# copymode复制权限
shutil.copymode('D:/test_liujj/test1','D:/test_liujj/test2')

4. copystat(src, dst, *, follow_symlinks=True)

复制元数据,stat包含权限 

shutil.copystat('D:/test_liujj/test1','D:/test_liujj/test2')
print(os.stat('D:/test_liujj/test1'))
print(os.stat('D:/test_liujj/test2'))

5.  copy(src, dst, *, follow_symlinks=True)

复制文件内容、权限和部分元数据,不包括创建时间和修改时间

本质上调用的是

copyfile(src, dst, follow_symlinks=follow_symlinks)
copymode(src, dst, follow_symlinks=follow_symlinks)

copy2比copy多了复制全部元数据,但需要平台支持

copy2拷贝的文件的创建时间、修改时间等和源文件一样,copy拷贝的文件的创建时间是新的,和源数据不同。

本质上调用的是

copyfile(src, dst, follow_symlinks=follow_symlinks)
copystat(src, dst, follow_symlinks=follow_symlinks)

6.  copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)

递归复制目录。默认使用copy2

src、dst必须是目录,src必须存在,dst必须不存在

ignore=func 提供一个callable(src,names)->ignored_names.提供一个函数,会被调用,src是源目录,names是os.listdir(src)的结果,就是列出src中的文件名,返回值是要被过滤的文件名的set类型数据。

def ignore(src, names):
    ig = filter(lambda x:x.startswith('test'),names)
    return set(ig)

shutil.copytree('D:/test_liujj/','D:/test/',ignore=ignore)

二、删除

1. rmtree(path, ignore_errors=False, οnerrοr=None)

递归删除,等于rm -rf 慎用

不是原子删除,可能删除错误,就会中断,已经删除的就删除了

ignore_errors=True时,忽略错误,为False或者omitted时onerror生效

onerror为callable,接受函数function、path、execinfo

shutil.rmtree('D:/test/')

三、移动

1. move(src, dst, copy_function=copy2)

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

shutil.move('D:/test_liujj/testpython/a.py','D:/test_liujj')

shutl还有打包功能。生成tar并压缩。支持zip、g2、bz、XZ。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值