day5-shutil模块
一、概述
我们通过python操作文件时,除正常读写操作外,有时还需要进行拷贝、删除、打包等操作,虽然os模块提供了部分功能,但还是不够完善,这里要讲讲专业的高级的文件,文件夹,压缩包处理模块shutil了。
二、shutil模块常见用法
- shutil.copyfileobj(fsrc, fdst,length)
将源文件内容拷贝到目标文件中,因此涉及到文件的读写操作。查阅资料显示可以拷贝部分文件内容,具体用法不详,后续再研究把。1 import shutil
2 with open('./binlog.log', 'r', encoding='utf-8') as f1,\
3 open('3.txt', 'w', encoding='utf-8') as f2:
4 shutil.copyfileobj(f1, f2) - shutil.copyfile(src, dst)
拷贝文件对象,但不包括权限1 shutil.copyfile('./1.txt','./2.txt')
2 shutil.copyfile('./1.txt', '../2.txt') - shutil.copy(src, dst)
拷贝文件,包括文件的权限(但不包括所有者属性)1 >>> import os,shutil
2 >>> os.chdir('/root/temp')
3 >>> shutil.copy('./test.py', './2.py')
4 >>> quit()
5 [root@test210 temp]# ls -ltr
6 total 24
7 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
8 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01
9 -rw-r--r--. 1 root root 7071 Nov 14 17:40 dns.zip
10 -rw-r--r--. 1 admin admin 23 Dec 26 07:49 test.py
11 -rw-r--r--. 1 root root 23 Dec 26 07:54 2.py # 拷贝的文件权限与源文件一致,但所有者不同 - shutil.copymode(src,dst)
仅仅拷贝文件的权限,前提是dst文件存在,不然会报错1 [root@test210 admin]# ls -ltr
2 total 4
3 -rwxr-xr-x. 1 admin admin 5 Jan 1 08:06 src_file
4 -rw-r--r--. 1 root root 0 Jan 1 08:08 dst_file #初始文件权限不同
5 [root@test210 admin]# python
6 Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)
7 [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
8 Type "help", "copyright", "credits" or "license" for more information.
9 >>> import os,shutil
10 >>> os.chdir("/home/admin")
11 >>> shutil.copymode('src_file','dst_file')
12 >>> quit()
13 [root@test210 admin]# ls -ltr
14 total 4
15 -rwxr-xr-x. 1 admin admin 5 Jan 1 08:06 src_file
16 -rwxr-xr-x. 1 root root 0 Jan 1 08:08 dst_file #拷贝后文件权限相同
17 [root@test210 admin]# - shutil.copystat(src,dst)
拷贝文件的属性状态信息,如权限,各种时间,bit,flag等,但不包括所有者和所属组1 [root@test210 temp]# ls -ltr
2 total 24
3 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
4 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01
5 -rw-r--r--. 1 root root 7071 Nov 14 17:40 dns.zip
6 -rw-r--r--. 1 admin admin 23 Dec 26 07:49 test.py
7 -rwxr-xr-x. 1 root root 23 Dec 26 07:54 2.py
8 [root@test210 temp]# python
9 Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)
10 [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
11 Type "help", "copyright", "credits" or "license" for more information.
12 >>> import os,shutil
13 >>> os.chdir('/root/temp')
14 >>> os.stat('test.py')
15 posix.stat_result(st_mode=33188, st_ino=1309341, st_dev=64768L, st_nlink=1, st_uid=500, st_gid=500, st_size=23, st_atime=1514246087, st_mtime=1514245766, st_ctime=1514246037)
16 >>> os.stat('2.py')
17 posix.stat_result(st_mode=33261, st_ino=1308211, st_dev=64768L, st_nlink=1, st_uid=0, st_gid=0, st_size=23, st_atime=1514246087, st_mtime=1514246087, st_ctime=1514765789)
18 >>> shutil.copystat('test.py','2.py')
19 >>> quit()
20 [root@test210 temp]# ls -ltr
21 total 24
22 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
23 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01
24 -rw-r--r--. 1 root root 7071 Nov 14 17:40 dns.zip
25 -rw-r--r--. 1 root root 23 Dec 26 07:49 2.py
26 -rw-r--r--. 1 admin admin 23 Dec 26 07:49 test.py #拷贝后2.py和test.py除所有者和所属组不同外,其他常见属性相同 - shutil.copy2(src,dst)
拷贝文件和文件的属性状态,目前来看等同于cp -a或cp -p1 [root@test210 temp]# ls -ltr
2 total 24
3 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
4 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01
5 -rw-r--r--. 1 root root 7071 Nov 14 17:40 dns.zip
6 -rw-r--r--. 1 root root 23 Dec 26 07:49 2.py
7 -rw-r--r--. 1 admin admin 23 Dec 26 07:49 test.py
8 [root@test210 temp]#
9 [root@test210 temp]#
10 [root@test210 temp]# python
11 Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)
12 [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
13 Type "help", "copyright", "credits" or "license" for more information.
14 >>> import os,shutil
15 >>> os.chdir('/root/temp')
16 >>> shutil.copy2('2.py','3.py')
17 >>> quit()
18 [root@test210 temp]# ls -ltr
19 total 28
20 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
21 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01
22 -rw-r--r--. 1 root root 7071 Nov 14 17:40 dns.zip
23 -rw-r--r--. 1 root root 23 Dec 26 07:49 3.py
24 -rw-r--r--. 1 root root 23 Dec 26 07:49 2.py
25 -rw-r--r--. 1 admin admin 23 Dec 26 07:49 test.py
26 [root@test210 temp]# cp -a 2.py 4.py
27 [root@test210 temp]# ls -ltr
28 total 32
29 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
30 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01
31 -rw-r--r--. 1 root root 7071 Nov 14 17:40 dns.zip
32 -rw-r--r--. 1 root root 23 Dec 26 07:49 4.py
33 -rw-r--r--. 1 root root 23 Dec 26 07:49 3.py
34 -rw-r--r--. 1 root root 23 Dec 26 07:49 2.py
35 -rw-r--r--. 1 admin admin 23 Dec 26 07:49 test.py
36 [root@test210 temp]# cp -p 2.py 5.py
37 [root@test210 temp]# ls -ltr
38 total 36
39 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
40 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01
41 -rw-r--r--. 1 root root 7071 Nov 14 17:40 dns.zip
42 -rw-r--r--. 1 root root 23 Dec 26 07:49 5.py
43 -rw-r--r--. 1 root root 23 Dec 26 07:49 4.py
44 -rw-r--r--. 1 root root 23 Dec 26 07:49 3.py
45 -rw-r--r--. 1 root root 23 Dec 26 07:49 2.py
46 -rw-r--r--. 1 admin admin 23 Dec 26 07:49 test.py - shutil.copytree(src,dst)
递归拷贝文件,相当于cp -r1 [root@test210 temp]# ls -ltr
2 total 36
3 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
4 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01
5 [root@test210 temp]# python
6 Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)
7 [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
8 Type "help", "copyright", "credits" or "license" for more information.
9 >>> import os,shutil
10 >>> os.chdir('/root/temp')
11 >>> shutil.copytree('01','02')
12 >>> quit()
13 [root@test210 temp]# ls -ltr 01 02
14 02:
15 total 4
16 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
17
18 01:
19 total 4
20 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
21 [root@test210 temp]# ls -ltr
22 total 40
23 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
24 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 02
25 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01 - shutil.rmtree(path[, ignore_errors[, onerror]])
递归删除文件,相当于rm -rf1 [root@test210 temp]# ls -ltr
2 total 40
3 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
4 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 02
5 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01
6 [root@test210 temp]# pyhon
7 -bash: pyhon: command not found
8 [root@test210 temp]# python
9 Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)
10 [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
11 Type "help", "copyright", "credits" or "license" for more information.
12 >>> import os,shutil
13 >>> os.chdir('/root/temp')
14 >>> shutil.rmtree('02')
15 >>> quit()
16 [root@test210 temp]# ls -ltr
17 total 36
18 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
19 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01 - shutil.move(src,dst)
移动文件,如果是路径则递归移动,相当于mv1 [root@test210 temp]# ls -ltr
2 total 20
3 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
4 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01
5 -rw-r--r--. 1 root root 7071 Nov 14 17:40 dns.zip
6 drwxr-xr-x. 2 root root 4096 Jan 1 08:32 02
7 [root@test210 temp]# ls -ltr 02
8 total 0
9 [root@test210 temp]# python
10 Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)
11 [GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
12 Type "help", "copyright", "credits" or "license" for more information.
13 >>> import os,shutil
14 >>> os.chdir('/root/temp')
15 >>> shutil.move('dns.zip','02')
16 >>> shutil.move('01','02')
17 >>> quit()
18 [root@test210 temp]# ls -ltr
19 total 8
20 drwxr-xr-x. 4 root root 4096 Aug 23 14:21 DNS
21 drwxr-xr-x. 3 root root 4096 Jan 1 08:34 02
22 [root@test210 temp]# ls -ltr 02
23 total 12
24 drwxr-xr-x. 3 root root 4096 Nov 14 17:37 01
25 -rw-r--r--. 1 root root 7071 Nov 14 17:40 dns.zip
三、shutil模块常见用法
1. shutil.make_archive((base_name, format, root_dir=None,base_dir=None,verbose=0,dry=0,owner=None,group=None,logger=None)
功能:创建压缩包并且返回文件路径,例如:zip,tar
- base_name : 压缩包的文件名,也可以是压缩包的路径,或者路径加文件名的混合体。如果仅仅指定文件名,则保存在当前目录,否则保存到指定路径。如果仅仅指定路径或者指定了路径和文件名,则自动把最后一级目录(如果只有路径)或者文件名作为压缩包的文件名前缀来处理。
- format:压缩包种类,'zip','tar','bztar','gztar'
- root_dir:需要压缩的文件夹路径(默认当前路径)
- owner:用户,默认当前用户
- group:组,默认当前组
- logger:用于记录日志,通常是logging.Logger对象
1 >>> import shutil
2 >>> shutil.make_archive('jb51.net','zip',"C:/Users/Beyondi/Downloads/jb51.net")
3 'C:\\Users\\Beyondi\\jb51.net.zip' #压缩包的保存路径是cmd的默认路径
4 >>>
5 >>>
6 >>> shutil.make_archive('C:/Users/Beyondi/Downloads/jb51.net','zip',"C:/Users/Be
7 yondi/Downloads/jb51.net")
8 'C:\\Users\\Beyondi\\Downloads\\jb51.net.zip' #指定了路径和文件名
9 >>> shutil.make_archive('C:/Users/Beyondi/Downloads/','zip',"C:/Users/Beyondi/Do
10 wnloads/jb51.net")
11 'C:\\Users\\Beyondi\\Downloads.zip' #仅仅指定路径,最后一级路径就被自动作为压缩包的文件名了
12 >>>
2. zipfile模块
功能:以zip的形式压缩和解压缩文件,注意了这个只能压缩文件,不能压缩目录,如果压缩,也只能显示空目录。
1 >>> import zipfile
2 #压缩
3 >>> z=zipfile.ZipFile('test.zip', 'w')
4 >>> z.write('test.txt')
5 >>> z.close()
6
7 #解压缩
8 >>> z=zipfile.ZipFile('test.zip','r')
9 >>> z.extractall()
10 >>> z.close
11
12 #操作方法类似于文件的操作
3. tarfile模块
功能:以tar的形式打包文件,能打包一切形式的文件,包括目录
- 打包
打包通过tar.add来实现,语法:先以写的方式打开tarfile文件对象,然后是tar.add(‘file’, arcname=’’), 第一个参数是期望打包的文件(可以是目录),第二个参数可选,定义打包文件中被打包文件的名称,如果不写则自动采用第一个参数的文件名,但会去掉根路径(猜测与Linux下的tar类似,防止解压后覆盖根路径下的重要文件)
1 >>> import tarfile
2 >>> tar = tarfile.open('test.tar','w')
3 >>> tar.add('test.zip')
4 >>> tar.add('C:/Users/Beyondi/Downloads/jb51.net',arcname='jb51.net')
5 >>> tar.add('E:/test/site.yml')
6 >>> tar.close()
7 >>>
来看下打包的效果:


通过上图可看到,没有定义打包文件中的文件名的,文件名就是源文件名,包含绝对路径,但已经去掉了根路径
- 解压
解压通过tar.extractall() 来实现,可自定义解压后的路径,默认就是当前目录。当然前提是先以读的方式打开tarfile文件对象。
1 >>> import tarfile
2 >>> tar=tarfile.open('test.tar','r')
3 >>> tar.extractall('tartest') #解压到指定目录下
4 >>> tar.close()
解压后的效果:

可以看到解压后的文件形式与在tar包中直接打开看到的相同。
day5-shutil模块的更多相关文章
- 小白的Python之路 day5 shutil模块
shutil模块 一.主要用途 高级的文件.文件夹.压缩包 等处理模块 二.常用方法详解 1.shutil.copyfileobj(fsrc, fdst) 功能:把一个文件的内容拷贝到另外一个文件中, ...
- Day5模块-shutil模块
参考博客:http://www.cnblogs.com/wupeiqi/articles/4963027.html shutil模块是高级的文件.文件夹.压缩处理的模块.比如文件的copy.压缩等. ...
- day5模块学习--shutil模块
shutil模块 高级的 文件.文件夹.压缩包 处理模块 os模块提供了对目录或者文件的新建/删除/查看文件属性,还提供了对文件以及目录的路径操作.比如说:绝对路径,父目录…… 但是,os文件的操作 ...
- Python学习-day5 常用模块
day5主要是各种常用模块的学习 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 conf ...
- python的shutil模块
shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作 1.复制文件 def copy(src, dst): """Co ...
- Python 之路 Day5 - 常用模块学习
本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...
- shutil模块
shutil模块 提供了大量的文件的高级操作,特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作 常用方法 shutil.copyfile(src, dst) 复制文件内容(不包含元数据)从 ...
- python 学习day5(模块)
一.模块介绍 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能 ...
- s14 第5天 时间模块 随机模块 String模块 shutil模块(文件操作) 文件压缩(zipfile和tarfile)shelve模块 XML模块 ConfigParser配置文件操作模块 hashlib散列模块 Subprocess模块(调用shell) logging模块 正则表达式模块 r字符串和转译
时间模块 time datatime time.clock(2.7) time.process_time(3.3) 测量处理器运算时间,不包括sleep时间 time.altzone 返回与UTC时间 ...
- Python中os和shutil模块实用方法集…
Python中os和shutil模块实用方法集锦 类型:转载 时间:2014-05-13 这篇文章主要介绍了Python中os和shutil模块实用方法集锦,需要的朋友可以参考下 复制代码代码如下: ...
随机推荐
- 《深入理解Linux网络技术内幕》阅读笔记 --- 路由表
路由表基本概念 1.路由是由多个不同的数据结构的组合来描述的,每个数据结构代表路由信息的不同部分.例如,一个fib_node对应一个单独的子网,一个fib_alias对应一条路由.这样做的原因是只需通 ...
- Django-1版本的路由层、Django的视图层和模板层
一.Django-1版本的路由层(URLconf) URL配置(URLconf)就像Django所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表:我们就是以这种方式告诉Dja ...
- sql server性能调优
转自:https://www.cnblogs.com/woodytu/tag/%E6%80%A7%E8%83%BD%E8%B0%83%E4%BC%98%E5%9F%B9%E8%AE%AD/defaul ...
- C#设置当前程序通过IE代理服务器上网
注意:以下设置只在当前程序中有效,对IE浏览器无效,且关闭程序后,自动释放代码. using System; using System.Collections.Generic; using Syste ...
- sql查询原理和Select执行顺序
一 sql语句的执行步骤 1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义. 2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限. 3)视图转换,将涉及视图的 ...
- redis实现队列queue
参考:<Redis入门指南>第4章进阶 http://book.51cto.com/art/201305/395461.htm 4.4.2 使用Redis实现任务队列 说到队列很自然就能想 ...
- Django框架之模板语法(重要!)
一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 1.模板语法之变量:语法为 {{ }}: 在 Django 模板中遍历复杂数据结构的关键 ...
- React setState更新数组中的某个元素Element item
var items = this.state.items; items[i].status = 'doing'; this.setState({ items: items }); //this.sta ...
- C#中各种数据类型可以表示的数据的范围
C#中各种数据类型可以表示的数据的范围 BOOL型为int型,一般认为占4个字节,取值TRUE/FALSE/ERROR. sbyte型为有符号8位整数,占1个字节,取值范围在-128 - 127之间. ...
- 【Flask】Flask Restful api
### 安装: Flask-Restful需要在Flask 0.8以上的版本,在Python2.6或者Python3.3上运行.通过pip install flask-restful即可安装. ### ...