模块 shutil 提供高级别的文件操作,例如复制(copying)和打包(archiving)。
复制文件
函数 copyfile() 复制文件内容到目标文件,如果没有权限写入目标文件则触发异常 IOError。
执行:
使用 glob 查看输出,成功复制了文件。注意,因为复制文件要打开文件读取内容,一些特殊的文件(例如 Unix device nodes) 不可以使用 copyfile() 复制。
另一个函数 copyfileobj() 和 copyfile() 一样实现了相同的功能,只不过参数使用的是文件流对象,可选的第三个参数可以指定读取块的缓冲区大小。
执行:
这里使用 io 模块生成在内存的临时文件流,使用 copyfileobj() 写入后,首先使用 seek() 定位到输出流文件开头,再读取。
函数 copy() 复制文件的第二个参数目标位置不仅可以是个文件,还可以是一个目录。类似于 Unix 的命令行工具 cp。如果是目录的话,会在目标目录生成一个新文件。
执行:
copy2() 类似 copy(),但是它还复制源文件的访问和修改时间元数据(metadata)。
执行:
复制文件元数据
在 Unix 中,创建文件时的权限默认使用当前用户的 umask 值,可以使用 copymode()函数修改权限元数据。
执行:
复制目录
shutil 使用函数 copytree() 复制目录,目标目录必须不存在。它会递归把所有的内容都复制到目标目录中。
执行:
要删除一个目录和他的内容,使用函数 rmtree()。
执行:
要移动一个文件或目录到另一个地方,使用函数 move()
执行:
本例进行了文件重命名,可以看到,它和 Unix 的命令行工具 mv 类似。如果源文件和目标位置相同,则进行重命名,否则再移动文件和目录。
查找文件
which() 函数从搜索路径(PATH)中根据文件名查找,一般是查找一个可执行程序。
执行:
也可以手动指定一个目录,从指定的目录中查找内容。
执行:
关键字参数 mode 指定了文件需要匹配的权限,默认是可执行权限,这里搜索的是可读文件。
打包和解包
除了模块 tarfile 和 zipfile 可以文件打包,shutil 还提供了高级别的函数实现打包解包的功能,可以通过函数 get_archive_formats() 查看当前系统支持的打包解包格式。
执行:
使用函数 make_archive() 打包文件,它支持递归打包指定目录下所有的内容,默认打包当前目录的内容。可以使用参数 root_dir 和 base_dir 更改默认配置,base_dir 是要打包的目录,root_dir 是打包目录的跟目录。
执行:
类似查看打包的格式,函数 get_unpack_formats() 可以查看系统支持的解包的格式。
执行:
使用函数 unpack_archive() 解包。
执行:
查看文件系统空间
查看本地系统空间使用函数 disk_usage(),返回一个元组,包括总空间大小,已使用大小和剩余大小。
执行:
留言与评论(共有 0 条评论) |