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 @ 2019-01-22 16:56  Sunzz  阅读(261)  评论(0)    收藏  举报