Python 模块 shutil-高级文件操作

Python 模块 shutil-高级文件操作

模块 shutil 提供高级别的文件操作,例如复制(copying)和打包(archiving)。

复制文件


函数 copyfile() 复制文件内容到目标文件,如果没有权限写入目标文件则触发异常 IOError。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

使用 glob 查看输出,成功复制了文件。注意,因为复制文件要打开文件读取内容,一些特殊的文件(例如 Unix device nodes) 不可以使用 copyfile() 复制。

另一个函数 copyfileobj() 和 copyfile() 一样实现了相同的功能,只不过参数使用的是文件流对象,可选的第三个参数可以指定读取块的缓冲区大小。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

这里使用 io 模块生成在内存的临时文件流,使用 copyfileobj() 写入后,首先使用 seek() 定位到输出流文件开头,再读取。

函数 copy() 复制文件的第二个参数目标位置不仅可以是个文件,还可以是一个目录。类似于 Unix 的命令行工具 cp。如果是目录的话,会在目标目录生成一个新文件。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

copy2() 类似 copy(),但是它还复制源文件的访问和修改时间元数据(metadata)。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

复制文件元数据


在 Unix 中,创建文件时的权限默认使用当前用户的 umask 值,可以使用 copymode()函数修改权限元数据。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

复制目录


shutil 使用函数 copytree() 复制目录,目标目录必须不存在。它会递归把所有的内容都复制到目标目录中。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

要删除一个目录和他的内容,使用函数 rmtree()。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

要移动一个文件或目录到另一个地方,使用函数 move()

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

本例进行了文件重命名,可以看到,它和 Unix 的命令行工具 mv 类似。如果源文件和目标位置相同,则进行重命名,否则再移动文件和目录。

查找文件


which() 函数从搜索路径(PATH)中根据文件名查找,一般是查找一个可执行程序。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

也可以手动指定一个目录,从指定的目录中查找内容。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

关键字参数 mode 指定了文件需要匹配的权限,默认是可执行权限,这里搜索的是可读文件。

打包和解包


除了模块 tarfile 和 zipfile 可以文件打包,shutil 还提供了高级别的函数实现打包解包的功能,可以通过函数 get_archive_formats() 查看当前系统支持的打包解包格式。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

使用函数 make_archive() 打包文件,它支持递归打包指定目录下所有的内容,默认打包当前目录的内容。可以使用参数 root_dir 和 base_dir 更改默认配置,base_dir 是要打包的目录,root_dir 是打包目录的跟目录。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

类似查看打包的格式,函数 get_unpack_formats() 可以查看系统支持的解包的格式。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

使用函数 unpack_archive() 解包。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作

查看文件系统空间


查看本地系统空间使用函数 disk_usage(),返回一个元组,包括总空间大小,已使用大小和剩余大小。

Python 模块 shutil-高级文件操作

执行:

Python 模块 shutil-高级文件操作


分享到:


相關文章: