python中shutil模块

shutil模块

文件拷贝:使用打开2个文件对象,源文件读取内容,写入目标文件中完成拷贝过程,但是这样会对视stat数据信息,只是单纯的把内容复制过去。为了解决这个问题python提供了一个方便的库shutil(高级文件操作)
copy复制

  • copyfileobj(fsrc,fdst[,length]),文件对象的复制,fsrc和fdst是open打开的文件对象,复制内容,fdst要求可写,length指定了表示buffer的大小
##### 内容上的复制
from pathlib import Path
p=Path('c:/Users/ASUS/temp/a/d')#目标目录
final=p/'copy.txt' #目标路径
with open('C:/Users/ASUS/temp/test.txt','r+',buffering=-1,encoding='gbk') as f1:
    print(f1.read(),'src') #查看原目录文件内容
    f1.seek(0)
    final.touch() #创建目标文件
    with open(str(final),'rt+',buffering=-1,encoding='gbk') as f2:
        print(f2.read(),'start')
        f2.write(f1.read())
        f2.flush()
        f2.seek(0)
        print(f2.read(),'final')

在这里插入图片描述

####使用shutil复制
from pathlib import Path
import shutil
p1=Path('c:/Users/ASUS/temp/a/d') #目标目录
p2=Path('C:/Users/ASUS/temp/test.txt')#源文件路径
delta=p1/'co.txt'
delta.touch()
print(delta)
with open(str(p2),'r+',buffering=-1,encoding='gbk') as f1:
    print(f1.read(),'源文件')
    f1.seek(0)
    with open(str(delta),'r+',buffering=-1,encoding='gbk') as f2:
        print(f2.read(),'目标文件')
        shutil.copyfileobj(f1,f2) #相当于复制内容,文件指针也会到EOF
        f2.seek(0)
        print(f2.read(),'目标文件')
    

在这里插入图片描述

  • 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),复制文件内容、权限和部分元数据,不包括创建时间和修改时间,本质上调用的是copy file 和copymode
  • copy2比copy多了复制全部元数据,但需要平台支持,本质上调用的是copyfile和copystat
  • copytree(src,dst,symlinks=False,ignore=None,copy_function=copy2,ignore_dangling_synlinks=False),递归复制目录,默认使用copy2,也就是带更多的元数据复制。src、dst必须是目录,src必须存在,dst必须不存在
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值