python常用模块之shutil模块

shutil模块,高级的文件、文件夹、压缩包处理模块

1.shutil.copyfile(src,des[,length]):将文件内容拷贝到另一个文件

In [1]: import os # 导入os模块

In [2]: os.listdir() # 查看当前目录下的文件和目录

Out[2]:

['.XIM-unix',

'.X11-unix',

'.font-unix',

'.Test-unix',

'.ICE-unix',

'replaceContent.py']

In [3]: import shutil # 导入shutil模块

In [4]: shutil.copyfileobj(open('replaceContent.py','r'),open('new_scripts.py','w')) # 以读的形式打开旧文件,再以写的形式写入新文件

In [5]: os.listdir()

Out[5]:

['.XIM-unix',

'.X11-unix',

'.font-unix',

'.Test-unix',

'.ICE-unix',

'replaceContent.py',

'new_scripts.py']

2.shutil.copyfile(src,des):拷贝文件,目标文件无需存在

In [8]: shutil.copyfile("new_scripts.py","scripts.py") # 把旧文件拷贝成为新文件

Out[8]: 'scripts.py'

In [9]: os.listdir()

Out[9]:

['.XIM-unix',

'.X11-unix',

'.font-unix',

'.Test-unix',

'.ICE-unix',

'replaceContent.py',

'new_scripts.py',

'scripts.py'] # 内容和new_scripts.py一样

3.shutil.copymode(src,des):仅拷贝权限。内容、组、用户均不变,目标文件需要存在

# 现在当前目录创建test.py文件,并且将scripts.py权限修改为755

In [11]: shutil.copymode("scripts.py","test.py")

代码运行如下:

[root@host-10-200-137-195 tmp]# ll

total 12

-rw-r--r-- 1 root root 1149 May 9 17:21 new_scripts.py

-rw-r--r-- 1 root root 1149 May 8 09:47 replaceContent.py

-rwxr-xr-x 1 root root 1149 May 9 17:24 scripts.py

-rwxr-xr-x 1 root root 0 May 9 17:26 test.py # 权限相同,但是内容没有复制过来,只复制权限

4.shutil.copystat():仅拷贝文件状态的信息,包括:mode bits atims mtime flags,目标文件必须存在

In [12]: shutil.copystat("scripts.py","test.py")

代码运行如下:

-rwxr-xr-x 1 root root 1149 May 9 17:24 scripts.py

-rwxr-xr-x 1 root root 0 May 9 17:24 test.py # 除了文件内容不一样,其余都是差不多的

5.shutil.copy(src,des):拷贝文件和权限

In [13]: shutil.copy("scripts.py","test.py")

Out[13]: 'test.py'

代码运行如下:

total 16

-rw-r--r-- 1 root root 1149 May 9 17:21 new_scripts.py

-rw-r--r-- 1 root root 1149 May 8 09:47 replaceContent.py

-rwxr-xr-x 1 root root 1149 May 9 17:24 scripts.py

-rwxr-xr-x 1 root root 1149 May 9 17:33 test.py # 只拷贝了文件内容和权限

6.shutil.copy2():拷贝文件和状态信息

# 此时删除test.py文件

In [14]: shutil.copy2("scripts.py","test.py")

Out[14]: 'test.py'

代码运行如下:

[root@host-10-200-137-195 tmp]# ll

total 16

-rw-r--r-- 1 root root 1149 May 9 17:21 new_scripts.py

-rw-r--r-- 1 root root 1149 May 8 09:47 replaceContent.py

-rwxr-xr-x 1 root root 1149 May 9 17:24 scripts.py

-rwxr-xr-x 1 root root 1149 May 9 17:24 test.py

7.shutil.copytree(src,des):递归的去拷贝文件夹,目标目录不能存在

# 首先在/tmp目录下创建a.txt文件

In [19]: shutil.copytree('/tmp/','/a/b/c/',ignore = shutil.ignore_patterns("*.py"))

Out[19]: '/a/b/c/'

代码运行如下:

[root@host-10-200-137-195 c]# pwd

/a/b/c

[root@host-10-200-137-195 c]# ls

a.txt

# 要对/a/b/c目录有写权限

# ignore代表排除

8.shutil.retree(src):递归的删除文件

In [20]: shutil.rmtree('/a/b/c/') # 只需一条命令,就删除了目录

9.shutil.move(src,des):递归的去移动文件,它类似mv命令,其实就是重命名

In [21]: shutil.move('test.py','new_test.py')

Out[21]: 'new_test.py'

In [22]: ll

total 16

-rw-r--r-- 1 root 0 May 9 17:39 a.txt

-rw-r--r-- 1 root 1149 May 9 17:21 new_scripts.py

-rwxr-xr-x 1 root 1149 May 9 17:24 new_test.py*

-rw-r--r-- 1 root 1149 May 8 09:47 replaceContent.py

-rwxr-xr-x 1 root 1149 May 9 17:24 scripts.py*

10.shutil.make_archive(base_name,format,root_dir):创建压缩包并返回文件路径

base_name:压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存到当前目录,否则保存刀片指定的目录

format:压缩包种类,例如:"zip","tar","bztar","gztar"

root_dir:要压缩的文件夹路径(默认当前目录)

owner:用户,默认当前用户

group:组,默认当前组

logger:用于记录日志,通常时logging.Logger对象

举例看一下:

# 将/tmp下的文件打包放置当前程序目录,压缩包名为yasuo

In [26]: shutil.make_archive("yasuo",'zip','/tmp')

Out[26]: '/tmp/yasuo.zip'

代码运行结果:

[root@host-10-200-137-195 tmp]# ll

total 24

-rw-r--r-- 1 root root 0 May 9 17:39 a.txt

-rw-r--r-- 1 root root 1149 May 9 17:21 new_scripts.py

-rwxr-xr-x 1 root root 1149 May 9 17:24 new_test.py

-rw-r--r-- 1 root root 1149 May 8 09:47 replaceContent.py

-rwxr-xr-x 1 root root 1149 May 9 17:24 scripts.py

-rw-r--r-- 1 root root 4950 May 9 17:59 yasuo.zip

[root@host-10-200-137-195 tmp]# unzip yasuo.zip # 文件已经存在,解压问是否覆盖?

Archive: yasuo.zip

replace replaceContent.py? [y]es, [n]o, [A]ll, [N]one, [r]ename: y

inflating: replaceContent.py

replace new_scripts.py? [y]es, [n]o, [A]ll, [N]one, [r]ename: y

inflating: new_scripts.py

replace scripts.py? [y]es, [n]o, [A]ll, [N]one, [r]ename: y

inflating: scripts.py

replace a.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: y

inflating: a.txt

replace new_test.py? [y]es, [n]o, [A]ll, [N]one, [r]ename: y

inflating: new_test.py

replace yasuo.zip? [y]es, [n]o, [A]ll, [N]one, [r]ename: y

inflating: yasuo.zip

[root@host-10-200-137-195 tmp]# ll

total 20

-rw-r--r-- 1 root root 0 May 9 17:39 a.txt

-rw-r--r-- 1 root root 1149 May 9 17:21 new_scripts.py

-rwxr-xr-x 1 root root 1149 May 9 17:24 new_test.py

-rw-r--r-- 1 root root 1149 May 8 09:47 replaceContent.py

-rwxr-xr-x 1 root root 1149 May 9 17:24 scripts.py

-rw-r--r-- 1 root root 3319 May 9 17:59 yasuo.zip

我们也可以将/tmp目录下的文件打包放在/opt目录下重新命名:

In [29]: shutil.make_archive("/opt/aaa",'gztar','/tmp')

Out[29]: '/opt/aaa.tar.gz'

运行结果:

[root@host-10-200-137-195 opt]# ll

total 4

-rw-r--r-- 1 root root 2120 May 9 18:04 aaa.tar.gz

[root@host-10-200-137-195 opt]# ll -a

total 8

drwxr-xr-x. 2 root root 23 May 9 18:04 .

dr-xr-xr-x. 19 root root 4096 May 9 18:03 ..

-rw-r--r-- 1 root root 2120 May 9 18:04 aaa.tar.gz

[root@host-10-200-137-195 opt]# tar -zxvf aaa.tar.gz

./

./.XIM-unix/

./.X11-unix/

./.font-unix/

./.Test-unix/

./.ICE-unix/

./replaceContent.py

./new_scripts.py

./scripts.py

./a.txt

./new_test.py

./yasuo.zip

shutil对压缩包的处理是通过ZipFile和TarFile两个模块进行的,详细:

zipfile 压缩&解压缩

压缩:

In [1]: import zipfile # 导入这个模块

In [2]: z = zipfile.ZipFile("压缩.zip",'w')

In [3]: z.write('a.txt') # 写入的内容应该是文件名

In [4]: z.write('new_test.py')

In [5]: z.close() # 关闭

此时运行完毕后,会在/tmp 的目录下生成"压缩.zip"文件

解压缩:先删除a.txt和new_test.py文件

In [10]: z = zipfile.ZipFile('压缩.zip','r')

In [12]: z.extractall('.') # 表示在当前目录下完成解压

In [13]: z.close()

那么在关闭的时候,文件就已经都回来了。不信你看:

-rw-r--r-- 1 root root 0 May 9 18:14 a.txt

-rw-r--r-- 1 root root 1149 May 9 17:21 new_scripts.py

-rw-r--r-- 1 root root 1149 May 9 18:14 new_test.py

-rw-r--r-- 1 root root 1149 May 8 09:47 replaceContent.py

-rwxr-xr-x 1 root root 1149 May 9 17:24 scripts.py

-rw-r--r-- 1 root root 1355 May 9 18:10 压缩.zip

tarfile压缩和解压缩

压缩:

In [1]: import tarfile

In [2]: t = tarfile.open("/opt/yasuo.tar",'w')

In [3]: t.add('a.txt',arcname="a.txt.bak") # 把a.txt.bak文件放到yasuo.tar进行压缩

In [4]: t.close()

代码运行完,就在/opt的目录下创建了yasuo.tar文件了

解压缩:

In [6]: t = tarfile.open('/opt/yasuo.tar','r')

In [7]: t.extractall('/tmp') # 将它解压到/tmp目录下

In [8]: t.close()

此时,a.txt.tar已经回到/tmp目录下了。

python shutil模块导入_python常用模块之shutil模块相关推荐

  1. python中common在哪个模块导入_python的常用模块之collections模块详解

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...

  2. python模块总结_Python常用模块资料总结和归纳

    Python模块是什么? 一个完整大型的python程序是由模块和包的形式组织起来的,可见模块在python中的重要性.模块是一种组织型式,它许多有关联(关系)的代码组织放到单独的独立文件中.简单的说 ...

  3. python模块导入_Python模块导入详解

    定义 模块:用来从逻辑上组织Python代码(变量.函数.类.逻辑)去实现一个功能.本质就是.py结尾的Python文件. 包:用来从逻辑上组织模块的(可以放一堆模块在目录下).本质就是一个目录(必须 ...

  4. python自建模块导入_Python模块的使用及自建模块的导入方法举例

    模块使用 模块: 模块式pyth1.on组织代码的基本方式 一个python脚本可以单独运行,也可以导入另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module) 所有的点p为文件都可以作 ...

  5. python模块导入_Python模块及其导入

    一.模块 1.模块的定义: 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少, 很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件 ...

  6. python常用模块用法_python常用模块(一)

    #什么是模块呢?就是用一大坨代码来完成一个功能的代码集合,是不是简单易懂 #类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个 ...

  7. python模块导入_python模块导入

    不同的执行方式: 从IDE中执行,python程序由IDE设置环境决定. 从系统中执行,python程序由环境变量中的系统变量path决定,从上往下选择. 模块导入顺序: 系统包优先级最高 > ...

  8. python 自定义函数导入_python如何导入自编函数模块

    Python中导入自定义的函数模块: 1.严格区分包(package)和文件夹.包的定义就是包含__init__.py的文件夹.如果没有__init__.py,那么就是普通的文件夹. 2.模块导入写法 ...

  9. python random模块导入_Python学习笔记(二十)—模块的导入

    一.模块介绍 Python 提供了强大的模块支持,主要体现在Python 标准库中包含了大量的模块(称为标准模块),还有大量的第三方模块,开发者自己也可以开发自定义模块.通过这些强大的模块可以极大地提 ...

最新文章

  1. 从Hive导出数据到Oracle数据库--Sqoop
  2. NeurIPS 2019 获奖论文出炉,微软华人学者Lin Xiao 获经典论文奖
  3. 基于java的InputStream.read(byte[] b,int off,int len)算法学习!
  4. 介绍 WebLogic 的一些结构和特点
  5. 自动化WiFI钓鱼工具——WiFiPhisher源码解读
  6. 关于java的public,private,protect,以及默认权限的理解
  7. 发现一个好工具RenderDoc
  8. 为什么只有奇次谐波_我们为什么要用UPS不间断电源?
  9. 博客园-我的新的开始
  10. Java停止线程的方式
  11. 简单循迹小车实验心得_红外自动循迹小车实验报告
  12. linux怎么编译sharedptr,如何使用智能指针(例如auto_ptr r shared_ptr)在Linux上使用C++生成链接列表数据结构?...
  13. LeNet-5 卷积神经网络
  14. phpstudy运行PHP项目出现404怎么办?
  15. CSS布局中应用BFC的例子
  16. 被裁的第50天,我终于拿到心仪公司Offer
  17. 重庆计算机一级考试在线做,全国(重庆考区)计算机一级考试教程.doc
  18. 码农跳槽指南:如何在新公司建立自己的“支配地位”?
  19. 企业计算机网络安全威胁及措施
  20. 人工智能之模式识别(二)

热门文章

  1. 什么?四个方法就能发现数据规律?太厉害
  2. iphone播客怎么上传_如何在iPhone,iPad或Android上收听播客
  3. 算法杂货铺——分类算法之决策树(Decision tree) - T2噬菌体
  4. Ubuntu有网络不能安装中文(下篇)
  5. 无APP无品牌并不是要宁滥勿缺
  6. rtthread mqtt
  7. Xshell中文乱码解决办法
  8. JavaScript正则匹配中拿到括号的值
  9. 连连看c语言源程序,连连看源代码C语言
  10. java sortedmap_SortedMap接口的实现类TreeMap介绍和实现Comparator自定义比较器