shutil、subprocess模块
shutil模块
os模块和shutil模块有一些重合的部分,两个模块提供相同的功能。os模块是对操作系统的接口进行封装,主要作用是跨平台。shutil模块包含复制、移动、重命名、删除文件以及目录的函数,主要作用是管理文件和目录。因此,它们并不冲突,并且是互补的关系。对于常见的文件操作,shutil根易于使用。应该尽量使用shutil里面的函数,在shutil里面没有功能的情况下再使用os模块下的函数。
1 复制文件和文件夹
copy:用来拷贝一个文件
copytree:用来拷贝一个目录。
与Linux的cp不同的是,Python中拷贝文件和目录是两个不同的函数
[root@master python] # ipython Python 3.6 . 8 (default, Apr 25 2019 , 21 : 02 : 35 ) Type 'copyright' , 'credits' or 'license' for more information IPython 7.5 . 0 - - An enhanced Interactive Python. Type '?' for help . In [ 1 ]: import shutil In [ 2 ]: ls a.txt dir1 / dir2 / In [ 3 ]: shutil.copy( "a.txt" , "b.txt" ) Out[ 3 ]: 'b.txt' In [ 4 ]: ls a.txt b.txt dir1 / In [ 5 ]: ls dir1 / 1.txt 2.txt 3.txt 4.txt 5.txt In [ 6 ]: shutil.copytree( "dir1" , "dir2" ) Out[ 6 ]: 'dir2' In [ 7 ]: ls a.txt b.txt dir1 / dir2 / |
2 文件和文件夹的移动与命名
shutil模块中的move(src,dst)用来将路径src处的文件移动到dst处,并返回新位置的绝对路径。这个函数的作用几乎等同于Linux下的mv命令。如果dst是一个目录,则将文件移动到目录之中;如果dst一个文件名称,则将文件移动到目标目录下,并重命名为dst。
In [ 1 ]: import shutil In [ 2 ]: ls a.txt dir1 / In [ 3 ]: shutil.move( "a.txt" , "b.txt" ) Out[ 3 ]: 'b.txt' In [ 4 ]: ls b.txt dir1 / In [ 5 ]: shutil.move( "b.txt" , "dir1" ) Out[ 5 ]: 'dir1/b.txt' In [ 6 ]: ls dir1 / In [ 7 ]: ls dir1 / b.txt |
3 使用shutil创建压缩包
使用shutil创建压缩包,只需调用shutil模块下的make_archive函数即可。make_archive函数有多个参数,其中,只有base_name与format这两个参数是必须传递的。参数base_name是创建压缩包的名称,参数format用来指定压缩包的格式,它的取值只能是get_archive_formats函数输出的结果。
In [ 1 ]: ls 1.txt 2.txt 3.txt 4.txt 5.txt b.txt In [ 2 ]: import shutil In [ 3 ]: shutil.make_archive( "backup" , "gztar" ) Out[ 3 ]: 'backup.tar.gz' In [ 4 ]: shutil.make_archive( "backup" , "zip" ) Out[ 4 ]: 'backup.zip' In [ 5 ]: ls 1.txt 2.txt 3.txt 4.txt 5.txt backup.tar.gz backup. zip b.txt In [ 6 ]: import tarfile In [ 7 ]: f = tarfile. open ( "backup.tar.gz" , "r:gz" ) In [ 8 ]: f.getnames() Out[ 8 ]: [ '.' , './1.txt' , './2.txt' , './3.txt' , './4.txt' , './5.txt' , './b.txt' ] |
在这个例子中,当前目录下包含4个Python文件和一个shell脚本文件。在当前目录下,以“backup”和“gztar” 这两个参数调用make_archive 函数,将会自动把当前目录下所有文件添加到backup.tar.gz中。
调用make_archive 函数有一些几个注意事项:
- base_name 是压缩包的名称,但是不包含相应的文件扩展名,make_archive 函数会自动加上相应的扩展名。
- format 这个函数的取值只能是get_archive_format 函数的返回值,在本例中,format只能取值为 bztar、gztar、tar和zip。
- make_archive 函数的第三个参数是root_dir,root_dir 用来指定创建压缩包的目录,默认为当前的目录。典型的用法是将当前目录切换到需要创建压缩包的目录,然后再调用make_archive 函数创建压缩包。
4 在Python3中使用shutil读取压缩包
在Python2中,shutil模块仅包含了创建压缩包的函数,并没有解压缩包的函数。在Python3中,shutil模块包含了一个与make_archive一样好用的解压函数,即unpack_archive函数,该函数的定义如下:
shutil.unpack_archive(filename, extract_dir=None, format=None)
unpack_archive函数的一个参数是压缩包的名称,第二个参数是解压以后的保存目录,第三个参数用来指定压缩包的格式。一般情况下,shutil能够根据压缩包的扩展名猜测压缩包的压缩格式,不需要指定format参数。
In [ 1 ]: import shutil In [ 2 ]: ls backup.tar.gz backup. zip In [ 3 ]: shutil.unpack_archive( "backup.tar.gz" ) In [ 4 ]: ls 1.txt 2.txt 3.txt 4.txt 5.txt backup.tar.gz backup. zip b.txt |
subprocess模块
1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)