shutil模块
高级的 文件、文件夹、压缩包 处理模块
os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作。比如说:绝对路径,父目录…… 但是,os文件的操作还应该包含移动 复制 打包 压缩 解压等操作,这些os模块都没有提供。
而本文所讲的shutil则就是对os中文件操作的补充。--移动 复制 打包 压缩 解压。
1、shutil.copyfileobj(fsrc, fdst[, length])
import shutil
f1 = open("alexsb","r",encoding="utf-8")
f2 = open("文件2","w",encoding='utf-8')
shutil.copyfileobj(f1,f2)
f1.close()
f2.close()
把一个文件复制到另外一个文件,记得要同时打开两个文件,如果是Windows,要加上encoding="utf-8",以"utf-8"读取和复制。
2、shutil.copyfile(src, dst)
源代码:从下面源代码可以看出,copyfile()方法自己打开模块,不需要我们再去打开模块,第一个模块是以"rb"模式打开,第二个模式是以"wb"模式打开,如果文件存在,从冲掉之前文件里面的内容。
def copyfile(src, dst, *, follow_symlinks=True):
if _samefile(src, dst):
raise SameFileError("{!r} and {!r} are the same file".format(src, dst))
for fn in [src, dst]:
try:
st = os.stat(fn)
except OSError:
# File most likely does not exist
pass
else:
# XXX What about other special files? (sockets, devices...)
if stat.S_ISFIFO(st.st_mode):
raise SpecialFileError("`%s` is a named pipe" % fn)
if not follow_symlinks and os.path.islink(src):
os.symlink(os.readlink(src), dst)
else:
with open(src, 'rb') as fsrc: with open(dst, 'wb') as fdst: copyfileobj(fsrc, fdst) return dst
import shutil
shutil.copyfile("文件2","文件3")
shutil.copyfile("被赋值文件","赋值文件")也是赋值文件,只是不需要打开文件,把一个文件赋值到另外一个文件中,如果这个文件不存在,则新建一个文件。
3.shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变
def copymode(src,dst):
'''Copy mode bits from src to dst'''
if hasattr(os,"chmod"):
st = os.stat(src)
mode = stat.S_IMODE(st,st_mode)
os.chmod(dst,mode)
在Linux平台上,文件有很多权限,shutil.copymode(src,dst)只让用户copy权限,不复制文件内容。
4.shutil.copystat(src, dst)
拷贝状态的信息,包括:mode bits, atime, mtime, flags
import shutilf1 = open("文件2","rb")
f2 = open("文件4","wb")
shutil.copystat("文件2","文件4")
5.shutil.copy(src, dst)
复制文件的内容以及权限,先copyfile后copymode
6.shutil.copy2(src, dst)
复制文件的内容以及文件的所有状态信息。先copyfile后copystat
7.shutil.ignore_patterns(*patterns)
8.shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False)
递归的复制文件内容及状态信息
shutil.copytree()递归地copy目录和文件,等于复制了一份完全一样的源文件。
import shutil
shutil.copytree("copytrees","new_copytrees")
创建一个一模一样的目录和文件,复制里面所有的内容,这个功能还是很强大的。就相当于直接点击复制粘贴。
9.shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
import shutil
shutil.rmtree("new_copytrees")
shutil.rmtree(path)是递归的删除文件,即便文件里面有内容也能够删除,我们知道,os.rmdir()如果文件有内容是不能删除的,相比较,系统