注册 登录

清河洛

python标准库中的高阶文件操作shutil模块

qingheluo2020-09-15清河洛342
shutil模块提供了一系列对文件和文件集合的高阶操作。拷贝操作shutil.copy(src, dst, *, follow_symlinks=True)将文件src拷贝到文件或目录dst。 如果dst为一个目录,文件将使用src中的基准文件名拷贝到dst。 follow_symlinks表示如果src为符号链接是否操作指向的文件 返回新创建文件的路径。 该方法会拷贝文件数据和文件的权限模式。其他元数据,例如文件的创建和修改时间不会被保留。 shutil.copy2(src, dst, *, follow_symlinks=True):类似于copy(),但copy2()还会尝试保留文...

shutil模块提供了一系列对文件和文件集合的高阶操作。

拷贝操作

shutil.copy(src, dst, *, follow_symlinks=True)

将文件src拷贝到文件或目录dst。
如果dst为一个目录,文件将使用src中的基准文件名拷贝到dst。
follow_symlinks表示如果src为符号链接是否操作指向的文件
返回新创建文件的路径。
该方法会拷贝文件数据和文件的权限模式。其他元数据,例如文件的创建和修改时间不会被保留。

shutil.copy2(src, dst, *, follow_symlinks=True):类似于copy(),但copy2()还会尝试保留文件的元数据。

shutil.copyfileobj(fsrc, fdst[, length])

将文件类对象fsrc的内容拷贝到文件类对象fdst。
整数值length如果给出则为缓冲区大小,length为负表示拷贝数据时不对源数据进行分块循环处理;默认情况下会分块读取数据以避免不受控制的内存消耗。

shutil.copyfile(src, dst, *, follow_symlinks=True)

将名为src的文件的内容(不包括元数据)拷贝到名为dst的文件并以尽可能高效的方式返回dst。
dst必须是完整的目标文件名,如果dst已经存在,它将被替换。
follow_symlinks表示如果src为一个符号链接时是否拷贝该链接所指向的文件
特殊文件如字符或块设备以及管道无法用此函数来拷贝。

shutil.copymode(src, dst, *, follow_symlinks=True)

从src拷贝权限位到dst。
文件的内容、所有者和分组将不受影响。
src 和 dst 均为路径类对象或字符串形式的路径名。

shutil.copystat(src, dst, *, follow_symlinks=True)

从src拷贝权限位、最近访问时间、最近修改时间以及旗标到dst。
文件的内容、所有者和分组将不受影响。

shutil.ignore_patterns(*patterns)

这个工厂函数会创建一个函数,可被用作copytree()的 ignore可调用对象参数,以忽略那些匹配所提供的glob风格的patterns之一的文件和目录。

shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False, dirs_exist_ok=False)

将以src为根起点的整个目录树拷贝到名为dst的目录并返回目标目录,目录的权限和时间会通过copystat()来拷贝,单个文件则会使用copy2()来拷贝。
dirs_exist_ok 指明是否要在dst指定目录已存在的情况下引发异常。
symlinks表示目录中的符号链接是否仅操作该符号链接。
当symlinks为假时,如果符号链接所指向的文件不存在,则会在拷贝进程的末尾将一个异常添加到 Error 异常中的错误列表。如果希望屏蔽此异常那就将可选的ignore_dangling_symlinks设为真值。
copy_function是一个将被用来拷贝每个文件的可调用对象。它在被调用时会将源路径和目标路径作为参数传入。

移动操作:

shutil.move(src, dst, copy_function=copy2)

递归地将一个文件或目录(src)移至另一位置(dst) 并返回目标位置。
如果dst是已存在的目录,则src会被移至该目录下。
如果目标已存在但不是目录,它可能会被覆盖,具体取决于 os.rename() 的语义。
copy_function必须为接受两个参数 src 和 dst 的可调用对象,并会在 os.rename()无法使用时被用来将 src 拷贝到 dest。如果源位置是一个目录,则会调用 copytree(),并向它传入 copy_function()。

删除操作:

shutil.rmtree(path, ignore_errors=False, onerror=None)

删除一个完整的目录树;
path必须指向一个目录(不能是一个目录的符号链接)。
如果ignore_errors为真值,删除失败导致的错误将被忽略;如果为假值或是省略,此类错误将通过调用由onerror所指定的处理程序来处理,如果onerror参数被省略则将引发一个异常。

在支持基于fd的函数的平台上,会使用rmtree()的可防御符号链接攻击的版本。
在其他平台上,rmtree()较易遭受符号链接攻击:攻击者可以操纵文件系统中的符号链接来删除他们在其他情况下无法访问的文件。
如果提供了 onerror,它必须为接受三个形参的可调用对象: function, path 和 excinfo。
第一个形参 function 是引发异常的函数;它依赖于具体的平台和实现。 第二个形参 path 将是传递给 function 的路径名。 第三个形参 excinfo 将是由 sys.exc_info() 所返回的异常信息。 由 onerror 所引发的异常将不会被捕获。
rmtree.avoids_symlink_attacks
指明当前平台和实现是否提供防御符号链接攻击的 rmtree() 版本。 目前它仅在平台支持基于 fd 的目录访问函数时才返回真值。

压缩和解压缩操作

shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group]]]]]])

创建一个归档文件(例如 zip 或 tar)并返回其名称。
base_name 是要创建的文件名称,包括路径,去除任何特定格式的扩展名。
format是归档格式:为 "zip" (需要zlib模块),"tar", "gztar" (需要zlib模块),"bztar" (需要bz2模块)或"xztar" (需要lzma模块)中的一个。
root_dir是一个目录,它将作为归档文件的根目录,归档中的所有路径都将是它的相对路径, 默认为当前目录;
base_dir是我们要执行归档的起始目录(必须相对于root_dir给出),也就是说base_dir将成为归档中所有文件和目录共有的路径前缀, 默认为当前目录。 
verbose 参数已不再使用并进入弃用状态。
如果dry_run为真值,则不会创建归档文件,但将要被执行的操作会被记录到logger。
owner 和 group 将在创建tar归档文件时被使用。默认会使用当前的所有者和分组。

shutil.get_archive_formats():返回支持的归档格式列表。返回序列中每个元素为一个元组(name, description)。

shutil.unpack_archive(filename[, extract_dir[, format]])

解包一个归档文件。filename是归档文件的完整路径。
extract_dir是归档文件解包的目标目录名称。如果未提供,则将使用当前工作目录。
format是归档格式, 如果未提供,将使用归档文件的扩展名来检查是否注册了对应于该扩展名的解包器。

shutil.get_unpack_formats():返回所有已注册的解包格式列表。 所返回序列中的每个元素为一个元组 (name, extensions, description)。

其他命令:

shutil.chown(path, user=None, group=None)

修改给定path的所有者 user 或 group。
user 可以是一个系统用户名或 uid, group 同样如此。
要求至少有一个参数。

shutil.disk_usage(path)

返回给定路径(可以是一个文件或是一个目录)的磁盘使用统计数据
其中包含 total, used 和 free 属性,分别表示总计、已使用和空闲的字节数

shutil.which(cmd):返回当给定的命令被调用时将要运行的可执行文件的路径。如果没有cmd会被调用则返回 None。



网址导航