本模块主要提供了一些对文件和多个文件的高级操作,比如文件的拷贝功能、文件的删除功能。如果只是想对一个文件进行操作,使用os模块操作就可以了。不过要值得注意的一点是本模块里拷贝文件和删除文件,在有一些情况下系统的元数据没有办法拷贝和删除。
8.8.1 目录和文件操作
shutil.copyfileobj(fsrc, fdst[, length])
拷贝文件类似的对象fsrc的内容到目标对象fdst。参数length是指明缓冲区的大小,如果是负数表示整个文件读取;默认值是读取一块磁盘大小的数据,不会占用太多内存。如果对文件对象操作完成之后,再想从头读取文件对象,需要调整文件对象的位置指针。
例子:
#python 3.4
import shutil
src = ‘F:\\temp\\py\\codecs1.py’
dst = ‘F:\\temp\\py\\test888.py’
with open(src, ‘rb’) as fsrc:
with open(dst, ‘wb’) as fdst:
shutil.copyfileobj(fsrc, fdst, 100)
shutil.copyfile(src, dst, *, follow_symlinks=True)
拷贝文件名称为src的内容到文件dst,返回dst文件路径。
例子:
#python 3.4
import shutil
src = ‘F:\\temp\\py\\codecs1.py’
dst = ‘F:\\temp\\py\\test888.py’
print(shutil.copyfile(src, dst))
结果输出如下:
F:\temp\py\test888.py
exception shutil.SameFileError
当调用函数copyfile()时,如果源文件与目标文件一样时,就会抛出这个异常。
shutil.copymode(src, dst, *, follow_symlinks=True)
拷贝文件的权限位,不影响文件的内容、拥有关系和组关系。
shutil.copystat(src, dst, *, follow_symlinks=True)
拷贝文件的权限位、最后访问时间、最后修改时间和标志,不影响文件的内容、拥有关系和组关系。
shutil.copy(src, dst, *, follow_symlinks=True)
拷贝文件src到文件或者目录dst。如果dst是目录,拷贝文件到目录里面。参数follow_symlinks为false,表示如果源文件是一个符号连接,目标也拷贝一个符号连接;如果为true,即使源文件是一个符号连接,也会拷贝源文件。
例子:
#python 3.4
import shutil
src = ‘F:\\temp\\py\\codecs1.py’
dst = ‘F:\\temp\\py\\dir1’
print(shutil.copy(src, dst))
结果输出如下:
F:\temp\py\dir1\codecs1.py
shutil.copy2(src, dst, *, follow_symlinks=True)
与copy函数一样的功能,只不过它会尽量拷贝所有文件相关的元数据。
shutil.ignore_patterns(*patterns)
用来创建一个忽略参数ignore,以便copytree()函数遍历文件时可以忽略的参数、文件和目录。
shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False)
递归地完全地拷贝一个目录到另外一个目录。
例子:
#python 3.4
import shutil
src = ‘F:\\temp\\py\\dir1’
dst = ‘F:\\temp\\py\\dir2\\1’
print(shutil.copytree(src, dst))
结果输出如下:
F:\temp\py\dir2\1
shutil.rmtree(path, ignore_errors=False, onerror=None)
删除整个目录树,路径必须是一个目录而不能是一个符号连接。参数ignore_errors设置为True时,会忽略发生的错误;如果设置为False时,当错误发生就会调用onerrro错误处理函数。
shutil.move(src, dst)
递归地移动一个文件或目录到另外目录位置。
例子:
#python 3.4
import shutil
src = ‘F:\\temp\\py\\dir2\\1’
dst = ‘F:\\temp\\py\\dir1\\2’
print(shutil.move(src, dst))
结果输出如下:
F:\temp\py\dir1\2
shutil.disk_usage(path)
返回磁盘的使用统计情况,以命名元组形式:(总数,已经使用,可用),单位为字节。
例子:
#python 3.4
import shutil
print(shutil.disk_usage(‘F:\\’))
结果输出如下:
usage(total=107373154304, used=93544562688, free=13828591616)
shutil.chown(path, user=None, group=None)
使用一个路径的拥有者和组关系。
shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None)
返回路径cmd里可执行文件的路径。
例子:
#python 3.4
import shutil
print(shutil.which(‘Python’))
结果输出如下:
C:\Python34\Python.EXE