Python内置模块---shutil模块介绍
在日常应用中我们需要对文件进行复制,移动,重命名等操作,这是我们就可以使用Python的内置模块shutil,shutil模块提供了一些支持文件拷贝,删除,移动和重命名等操作的函数。
shutil函数介绍
-
copyfileobj(fsrc, fdst[, length])
将文件类对象 fsrc 的内容拷贝到文件类对象 fdst。整数值 length 如果给出则为缓冲区大小。length为负值表示拷贝数据时不对源数据进行分块循环处理;默认情况下会分块读取数据以避免不受控制的内存消耗。 请注意如果 fsrc 对象的当前文件位置不为 0,则只有从当前文件位置到文件末尾的内容会被拷贝。
shutil.copyfile
(src, dst, *, follow_symlinks=True)
将名为 src 的文件的内容(不包括元数据)拷贝到名为 dst 的文件并以尽可能高效的方式返回 dst。src 和 dst均为路径类对象或以字符串形式给出的路径名。
对于shutil.copyfile方法的使用需要注意以下几点:
- dst 必须是完整的目标文件名;如果 src 和 dst 指定了同一个文件,则将引发SomeFileError。
- 目标位置必须是可写的;否则将引发 OSError异常。 如果 dst 已经存在,它将被替换。 特殊文件如字符或块设备以及管道无法用此函数来拷贝。
- 如果 follow_symlinks =false且 src 为符号链接,则将创建一个新的符号链接而不是拷贝 src 所指向的文件。
shutil.copymode
(src, dst, *, follow_symlinks=True)
从 src 拷贝权限位到 dst。 文件的内容、所有者和分组将不受影响。 src 和 dst 均为路径类对象或字符串形式的路径名。 如果 follow_symlinks 为false,并且 src 和 dst 均为符号链接,copymode()将尝试修改 dst 本身的模式(而非它所指向的文件)。
shutil.copystat
(src, dst, *, follow_symlinks=True)
从 src 拷贝权限位、最近访问时间、最近修改时间以及旗标到 dst。 在 Linux上,copystat()还会在可能的情况下拷贝“扩展属性”。 文件的内容、所有者和分组将不受影响。 src 和 dst 均为路径类对象或字符串形式的路径名。如果 follow_symlinks 为假值,并且 src 和 dst 均指向符号链接,copystat()将作用于符号链接本身而非该符号链接所指向的文件 — 从 src 符号链接读取信息,并将信息写入 dst 符号链接。
shutil.copy
(src, dst, *, follow_symlinks=True)
将文件 src 拷贝到文件或目录 dst。 src 和 dst 应为字符串。 如果 dst 指定了一个目录,文件将使用 src 中的基准文件名拷贝到 dst。 返回新创建文件的路径。
如果 follow_symlinks 为false且 src 为符号链接,则 dst 也将被创建为符号链接。 如果 follow_symlinks 为true且 src 为符号链接,dst 将成为 src 所指向的文件的一个副本。
copy()会拷贝文件数据和文件的权限模式 (参见 os.chmod()
)。 其他元数据,例如文件的创建和修改时间不会被保留。 要保留所有原有的元数据,请改用 copy2()。
shutil.copy2
(src, dst, *, follow_symlinks=True)
类似于 copy(),区别在于 copy2() 还会尝试保留文件的元数据。
shutil.
move
(src, dst, copy_function=copy2)
递归地将一个文件或目录 (src) 移至另一位置 (dst) 并返回目标位置。如果目标是已存在的目录,则 src 会被移至该目录下。 如果目标已存在但不是目录,它可能会被覆盖,具体取决于 os.rename()
的语义。
shutil.
disk_usage
(path)
返回给定路径的磁盘使用统计数据,形式为一个named tuple,其中包含 total, used 和 free 属性,分别表示总计、已使用和未使用空间的字节数。 path 可以是一个文件或是一个目录。
- shutil.copytree(src,dst)
返回一个新复制的文件夹的路径字符串。将路径 source 处的文件夹,包括它的所有文件和子文件夹,复制到路径destination 处的文件夹。 source 和destination 参数都是字符串。shutil.copy()复制一个文件, shutil.copytree()复制整个文件夹,以及它包含
的文件夹和文件。
- shutil.rmtree(path)
这个函数无返回值,这个函数将删除 path 处的文件夹,它包含的所有文件和文件夹都会被删除,无论文件夹是否为空。
#coding:utf-8
import shutil,os
os.chdir('D:\\') #切换目录到D盘根目录
shutil.copy('D:\\file1\\新建文本文档.txt','D:\\file2') #将新建文本文档.txt拷贝至D:\\file2下
shutil.move('D:\\file2\\新建文本文档.txt','D:\\照片') #将D:\\file2\\新建文本文档.txt移动到D:\\照片 目录下
shutil.copytree('D:\\file1','D:\\file3') #将D:\\file1整个目录连同目录下的文件拷贝至file3下,file3不存在是创建该目录。
shutil.rmtree('D:\\file3') #将D:\\file3以及目录下的文件整个删除。