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

 

posted @   Sunzz  阅读(244)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示