函数和常用模块【day06】:shutil模块(四)
本节内容
- 简书
- 模块详解
- 压缩解压
一、简述
我们在日常处理文件时,经常用到os模块,但是有的时候你会发现,像拷贝、删除、打包、压缩等文件操作,在os模块中没有对应的函数去操作,下面我们就来讲讲高级的 文件、文件夹、压缩包 处理模块:shutil
二、模块详解
1、shutil.copyfileobj(fsrc, fdst)
功能:把一个文件的内容拷贝到另外一个文件中,可以是部分文件内容。
1
2
3
|
with open ( "f_old" , 'r' ,encoding = "utf-8" ) as f1,\ open ( "f_new" , "w" ,encoding = "utf-8" ) as f2: shutil.copyfileobj(f1,f2) #拷贝文件的内容 |
注:经过试验,目前试验不出可以拷贝部分文件内容,先忘记可以拷贝部分内容把。
2、shutil.copyfile(src, dst)
功能:拷贝文件,但是不拷贝所有权限
1
2
|
shutil.copyfile( "f_old" , "f_new" ) #同一目录下拷贝文件 shutil.copyfile(r 'D:\PycharmProjects\pyhomework\day5\shutil_mode\shutil_mod\f_old' ,r 'd:\f_new' ) #通过绝对路径拷贝文件 |
3、shutil.copymode(src, dst)
功能:拷贝文件的文件权限
1
2
3
4
5
6
7
8
9
10
11
12
|
[root@whtest137 ~] # ll total 8 - rwxr - xr - x 1 root root 0 Apr 1 16 : 05 zhangqigao #有执行权限 - rw - r - - r - - 1 whtest whtest 0 Apr 1 16 : 06 zhangqigao_old #没有执行权限 >>> import os,shutil >>> os.chdir( "/root" ) #拷贝"zhangqigao_old"权限给"zhangqigao" >>> shutil.copymode( "zhangqigao_old" , "zhangqigao" ) [root@whtest137 ~] # ll total 8 - rw - r - - r - - 1 root root 0 Apr 1 16 : 05 zhangqigao # 获得跟"zhangqigao_old"一样的文件权限 - rw - r - - r - - 1 whtest whtest 0 Apr 1 16 : 06 zhangqigao_old |
4、shutil.copystat(src, dst)
功能:拷贝文件的状态信息,如:mode bits, atime, mtime, flags
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#两个文件的创建时间和用户权限都不同 [root@jenkins_sh temp] # ll total 0 - rw - r - - r - - 1 root root 0 Apr 1 17 : 31 zhangqigao - rwxr - xr - x 1 jenkins jenkins 0 Apr 1 16 : 26 zhangqigao_old #python操作 >>> import os,shutil >>> os.chdir( "/temp" ) #zhangqigao 这个文件状态 >>> os.stat( "zhangqigao" ) posix.stat_result(st_mode = 33188 , st_ino = 76808194 , st_dev = 2053L , st_nlink = 1 , st_uid = 0 , st_gid = 0 , st_size = 0 , st_atime = 1491039109 , st_mtime = 1491039109 , st_ctime = 1491039109 ) #zhangqigao_old的文件状态 >>> os.stat( "zhangqigao_old" ) posix.stat_result(st_mode = 33261 , st_ino = 76808195 , st_dev = 2053L , st_nlink = 1 , st_uid = 101 , st_gid = 103 , st_size = 0 , st_atime = 1491035188 , st_mtime = 1491035188 , st_ctime = 1491035242 ) #拷贝zhangqigao_old 文件状态给zhangqigao 文件 >>> shutil.copystat( "zhangqigao_old" , "zhangqigao" ) # 拷贝后,zhangqigao文件的文件状态 >>> os.stat( "zhangqigao" ) posix.stat_result(st_mode = 33261 , st_ino = 76808194 , st_dev = 2053L , st_nlink = 1 , st_uid = 0 , st_gid = 0 , st_size = 0 , st_atime = 1491035188 , st_mtime = 1491035188 , st_ctime = 1491039237 ) #操作后两个文件比较 [root@jenkins_sh temp] # ll total 0 - rwxr - xr - x 1 root root 0 Apr 1 16 : 26 zhangqigao #状态包括文件权限,文件创建的时间等,不包括文件所属用户和用户组 - rwxr - xr - x 1 jenkins jenkins 0 Apr 1 16 : 26 zhangqigao_old |
5、shutil.copy(src, dst)
功能:拷贝文件和文件的权限
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#拷贝前 [root@jenkins_sh temp] # ll total 0 - rwxr - xr - x 1 jenkins jenkins 0 Apr 1 16 : 26 zhangqigao_old #拷贝中 >>> import os,shutil >>> os.chdir( "/temp" ) >>> shutil.copy( "zhangqigao_old" , "zhangqigao" ) #拷贝结果输出 [root@jenkins_sh temp] # ll total 0 - rwxr - xr - x 1 root root 0 Apr 1 17 : 42 zhangqigao #拷贝了zhangqigao_old文件和文件权限 - rwxr - xr - x 1 jenkins jenkins 0 Apr 1 16 : 26 zhangqigao_old |
6、shutil.copy2(src, dst)
功能:拷贝文件和文件的状态
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#拷贝前 [root@jenkins_sh temp] # ll total 0 - rwxr - xr - x 1 jenkins jenkins 0 Apr 1 16 : 26 zhangqigao_old #拷贝中 >>> import os,shutil >>> os.chdir( "/temp" ) >>> shutil.copy2( "zhangqigao_old" , "zhangqigao" ) #拷贝后 [root@jenkins_sh temp] # ll total 0 - rwxr - xr - x 1 root root 0 Apr 1 16 : 26 zhangqigao #拷贝了zhangqigao_old的文件和状态 - rwxr - xr - x 1 jenkins jenkins 0 Apr 1 16 : 26 zhangqigao_old |
7、shutil.copytree(src, dst)
功能:递归的去拷贝文件,相当于cp -r
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#操作前 [root@jenkins_sh temp] # ll total 4 drwxr - xr - x 2 root root 4096 Apr 1 17 : 53 xiaogao [root@jenkins_sh temp] # cd xiaogao/;ll total 0 - rwxr - xr - x 1 root root 0 Apr 1 16 : 26 zhangqigao - rwxr - xr - x 1 jenkins jenkins 0 Apr 1 16 : 26 zhangqigao_old #操作中 >>> import os,shutil >>> os.chdir( "/temp" ) >>> shutil.copytree( "xiaogao" , "gaogao" ) #递归拷贝 #操作结果 [root@jenkins_sh temp] # ll total 8 drwxr - xr - x 2 root root 4096 Apr 1 17 : 53 gaogao #拷贝成功 drwxr - xr - x 2 root root 4096 Apr 1 17 : 53 xiaogao [root@jenkins_sh temp] # cd gaogao/;ll total 0 - rwxr - xr - x 1 root root 0 Apr 1 16 : 26 zhangqigao - rwxr - xr - x 1 root root 0 Apr 1 16 : 26 zhangqigao_old |
9、shutil.rmtree(path[, ignore_errors[, onerror]])
功能:递归的去删除文件,相当于:rm -fr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#操作前 [root@jenkins_sh temp] # ll total 4 drwxr - xr - x 2 root root 4096 Apr 1 17 : 53 xiaogao [root@jenkins_sh temp] # cd xiaogao/;ll total 0 - rwxr - xr - x 1 root root 0 Apr 1 16 : 26 zhangqigao - rwxr - xr - x 1 jenkins jenkins 0 Apr 1 16 : 26 zhangqigao_old #操作中 >>> import os,shutil >>> os.chdir( "/temp" ) >>> shutil.rmtree( "xiaogao" ) #操作结果 [root@jenkins_sh temp] # ll total 0 #成功删除xiaogao目录 |
10、shutil.move(src, dst)
功能:递归的去移动文件 相当于:mv
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#操作前 [root@jenkins_sh temp] # ll total 4 drwxr - xr - x 2 root root 4096 Apr 1 18 : 07 xiaogao - rw - r - - r - - 1 root root 0 Apr 1 18 : 07 zhangqigao #操作中 >>> import shutil >>> shutil.move( "/temp/zhangqigao" , "/temp/xiaogao" ) #把文件移到目录中 #操作结果 [root@jenkins_sh xiaogao] # ll total 4 drwxr - xr - x 2 root root 4096 Apr 1 18 : 08 xiaogao [root@jenkins_sh temp] # cd xiaogao/;ll total 0 - rw - r - - r - - 1 root root 0 Apr 1 18 : 07 zhangqigao |
三、压缩解压缩
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
1
2
3
4
5
6
7
8
|
#指定路径 >>> import shutil #把/temp下的xiaogao文件以zip压缩格式压缩,并且存放在/temp/zhangqigao目录下,"/temp/zhangqigao/xiaogao" 中的xiaogao是压缩名 >>> shutil.make_archive( "/temp/zhangqigao/xiaogao" , 'zip' , "/temp/xiaogao" ) '/temp/zhangqigao/xiaogao.zip' #压缩结果 #默认当前路径 >>> shutil.make_archive( "xiaogao" , 'zip' , "/temp/xiaogao" ) '/temp/xiaogao.zip' |
2、zipfile
功能:以zip的形式压缩文件,注意了这个只能压缩文件,不能压缩目录,如果压缩,也只能显示空目录。
1
2
3
4
5
6
7
8
9
10
11
12
|
import zipfile # 压缩 z = zipfile.ZipFile( 'laxi.zip' , 'w' ) z.write( 'a.log' ) #写入 z.write( 'data.data' ) z.close() #关闭 # 解压 z = zipfile.ZipFile( 'laxi.zip' , 'r' ) z.extractall() #解压 z.close() |
3、tarfile
功能:以tar的形式打包文件,这边能打包所以文件,包括目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
import tarfile # 打包 tar = tarfile. open ( 'your.tar' , 'w' ) #不加arcname打的是绝对路径,也就是/Users/wupeiqi/PycharmProjects/bbs2.zip,加这个表示你在your.tar中加什么文件就写什么文件名,也就是bbs2.zip tar.add( '/Users/wupeiqi/PycharmProjects/bbs2.zip' , arcname = 'bbs2.zip' ) tar.add( '/Users/wupeiqi/PycharmProjects/cmdb.zip' , arcname = 'cmdb.zip' ) tar.close() # 解压 tar = tarfile. open ( 'your.tar' , 'r' ) tar.extractall() # 可设置解压地址 tar.close() |
小结:
- tar打包不会压缩文件,所以文件的大小没有变
- zip才会压缩,所以压缩后的文件大小会变小
- 一般情况下是先打包再压缩
函数和常用模块【day06】:shutil模块(四)的更多相关文章
- python常用模块之shutil模块
python常用模块之shutil模块 shutil模块,高级的文件.文件夹.压缩包处理模块 1.shutil.copyfile(src,des[,length]):将文件内容拷贝到另一个文件 In ...
- [转]python中对文件、文件夹的操作——os模块和shutil模块常用说明
转至:http://l90z11.blog.163.com/blog/static/187389042201312153318389/ python中对文件.文件夹的操作需要涉及到os模块和shuti ...
- os模块和shutil模块
# coding=utf-8 import os path="D:\\test" ######### 目录结构如下 # test # / \ \ \ # test01 test02 ...
- 元数据的概念以及相关的操作os模块、shutil模块
查看文件的元数据 stat [OPTION]… FILE… OPTION: -f 输出文件系统的状态,而非文件的状态 -t 显示简要格式的文件元数据信息 FILE:可同时查看多个文件的元数据信息,多个 ...
- os模块、os.path模块、shutil模块、configparser模块、subprocess模块
一.os模块 os指的是操作系统 该模块主要用于处理与操作系统相关的操作,常用的是文件操作(读.写.删.复制.重命名). os.getcwd() 获取当前文件所在的文件夹路径 os.chdir() ...
- Python进阶5---StringIO和BytesIO、路径操作、OS模块、shutil模块
StringIO StringIO操作 BytesIO BytesIO操作 file-like对象 路径操作 路径操作模块 3.4版本之前:os.path模块 3.4版本开始 建议使用pathlib模 ...
- (汇总)os模块以及shutil模块对文件的操作
''' # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux ...
- python 之 random 模块、 shutil 模块、shelve模块、 xml模块
6.12 random 模块 print(random.random()) (0,1)----float 大于0且小于1之间的小数 print(random.randint(1,3)) [1,3] 大 ...
- logging模块、shutil模块、subprocess模块、xml模块
logging模块 shutil模块 subprocess模块 xml模块 logging模块 函数式简单配置 import logging logging.debug('debug message' ...
- Python入门-模块2(sys模块、shutil 模块)
sys模块: sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 s ...
随机推荐
- 2PC/3PC到底是啥
讨论 提到2PC/3PC首先想到的是它是一致性协议,而且经常把它和Paxos协议放在一起比较,并且经常看到这样的说法"世上只有一种一致性算法,那就是Paxos",2PC/3PC并不 ...
- DokuWiki 使用
新建文件夹 修改url, 将新文件夹的名称赋值给url上的id, 如要建一个"DokuWiki"的文件夹,并在文件夹下新增一个"QuickStart"的页面,改 ...
- 微信小程序选择并上传图片
上传图片 API: wx.chooseImage() 和 wx.uploadFile() wx.chooseImage({ count: 1, // 默认9 sizeType: ['origina ...
- 【读书笔记】Linux内核设计与实现(第五章)
5.1 内核通信 系统调用在用户空间和硬件设备之间添加了一个中间层. 该层主要作用: 1.为用户空间提供了一种硬件的抽象接口. 2.保证了系统的稳定和安全. 3.每个进程都运行在虚拟系统中. 在Lin ...
- 英语学习/词典App分析-团队作业(五)
英语学习/词典APP排行五排名: 1.网易有道词典(单词查询翻译类软件). 2.百词斩(单词记忆类软件). 3.沪江开心词场. 4.金山词霸. 5.流利说英语(英语口语APP). 个软件的分析: 1. ...
- ELK Stack (1) —— ELK + Redis安装
ELK Stack (1) -- ELK + Redis安装 摘要 安装Elasticsearch.Logstash.Kibana与Redis以实现一个日志收集平台 版本 elasticsearch版 ...
- JDK & Eclipse & SVN
JDK & Eclipse & SVN Mac 开机密码 commit SVN for MacOS Java SE 11.0.2(LTS) https://www.oracle.com ...
- Sublime Text 3 插件整理
Sublime Text作为一个尽为人知的代码编辑器,其优点不用赘述.界面整洁美观.文本功能强大,且运行速度极快,非常适合编写代码,写文章做笔记.Sublime Text还支持Mac.Windows和 ...
- 1643【例 3】Fibonacci 前 n 项和
1643:[例 3]Fibonacci 前 n 项和 时间限制: 1000 ms 内存限制: 524288 KB sol:这题应该挺水的吧,就像个板子一样 1 0 01 1 0 * ...
- Java NIO 详解(一)
一.基本概念描述 1.1 I/O简介 I/O即输入输出,是计算机与外界世界的一个借口.IO操作的实际主题是操作系统.在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通 ...