shutil模块
-
- shutil.copyfileobj(fsrc, fdst[, length]):复制文件对象(受文件指针seek影响)
- shutil.copyfile(src, dst, *, follow_symlinks=True):复制文件内容
- shutil.copymode(src, dst, *, follow_symlinks=True):只复制权限,不影响内容
- shutil.copystat(src, dst, *, follow_symlinks=True):复制权限和文件元数据
- shutil.copy(src, dst, *, follow_symlinks=True):复制文件内容和权限
- shutil.copy2(src, dst, *, follow_symlinks=True):复制文件内容和权限,文件元数据
- shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)
- shutil.rmtree(path, ignore_errors=False, οnerrοr=None):删除整个目录树
- shutil.move(src, dst, copy_function=copy2):递归地将文件或目录(src)移动到另一个位置(dst)
shutil.copyfileobj(fsrc, fdst[, length]):复制文件对象(受文件指针seek影响)
将类似文件的对象fsrc的内容复制到类似文件的对象fdst。整数length(如果给出)是缓冲区大小。具体地,负的长度值意味着复制数据而不使块中的源数据循环;默认情况下,以块为单位读取数据,以避免不受控制的内存消耗。请注意,如果fsrc对象的当前文件位置不为0,则只会复制当前文件位置到文件末尾的内容
例如:
import shutil
from pathlib import Path
p1 = Path('E:/test/a.txt')
p1.parent.mkdir(parents=True,exist_ok=True)
p1.touch()
with open('E:/test/a.txt','r+') as f1:
f1.write('abcd\n12345')
f1.flush()
f1.seek(0) #注意指针问题,否则copy内容为空
with open('E:/test/a1.txt','w+') as f2:
shutil.copyfileobj(f1,f2)
copyfileobj的源代码:
def copyfileobj(fsrc, fdst, length=16*1024):
"""copy data from file-like object fsrc to file-like object fdst"""
while 1: #死循环