函数和常用模块【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 ~]# lltotal 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 ~]# lltotal 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]# lltotal 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]# lltotal 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]# lltotal 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]# lltotal 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]# lltotal 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]# lltotal 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]# lltotal 4drwxr-xr-x 2 root root 4096 Apr 1 17:53 xiaogao[root@jenkins_sh temp]# cd xiaogao/;lltotal 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]# lltotal 8drwxr-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/;lltotal 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]# lltotal 4drwxr-xr-x 2 root root 4096 Apr 1 17:53 xiaogao[root@jenkins_sh temp]# cd xiaogao/;lltotal 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]# lltotal 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]# lltotal 4drwxr-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]# lltotal 4drwxr-xr-x 2 root root 4096 Apr 1 18:08 xiaogao[root@jenkins_sh temp]# cd xiaogao/;lltotal 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.ziptar.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 ...
随机推荐
- [BZOJ3693]圆桌会议[霍尔定理+线段树]
题意 题目链接 分析 又是一个二分图匹配的问题,考虑霍尔定理. 根据套路我们知道只需要检查 "区间的并是一段连续的区间" 这些子集. 首先将环倍长.考虑枚举答案的区间并的右端点 \ ...
- 后端自动构建前端css和js
引子: 别的复杂前端开发技术不会,用得多的还是手写代码,手动处理. 3年前手写合并压缩js和css文件的asp脚本代码目前还能正常运行,也就没有多大使用别的技术的动力. 直到近期被一个问题纠结着,今天 ...
- Android Studio Xposed模块编写(一)
1.环境说明 本文主要参考https://my.oschina.net/wisedream/blog/471292?fromerr=rNPFQidG的内容,自己实现了一遍,侵权请告知 已经安装xpos ...
- C#用Infragistics 导入导出Excel(一)
最近项目中有数据的导入导出Excel的需求,这里做简单整理. 公司用的是Infragistics的产品,付费,不需要本地安装Office. 有需要的朋友可以下载 Infragistics.2013.2 ...
- 谷歌商店高级搜索 Google play advanced search
这个问题一直搜索了很久都没有答案,后来在StackOverflow上提问,很久也没人回答. 详见我的SO:https://stackoverflow.com/questions/52939493/ho ...
- 对NP问题的一点感想
一.概述 回忆欧拉回路问题,要求找出一条经过图的每条边恰好一次的路径,这个问题是线性可解的.哈密尔顿圈问题是找一个简单圈,该圈包括图的每一个顶点.对于这个问题,现在还没有发现线性算法. 对于有向图的单 ...
- web项目_学生证管理系统
项目简述: 基于java web实现学生卡管理系统,用户包括学生和学生处,分别实现以下功能. 学生: 1.对本人登录密码的修改 2.申请补办学生卡 3.查看学生卡补办状态 学生处: 1.对学生信息的管 ...
- 软件测试_Loadrunner_APP测试_性能测试_脚本录制_基本操作流程
这次主要是写一下使用Loadrunner对APP进行性能测试的基本流程,有关性能测试监控指标请查看链接:软件测试_性能测试_关注点. 先决条件:已安装Loadrunner.如未安装,请查看链接:软件测 ...
- 按键精灵对APP自动化测试(上)
简单介绍下应用背景:测试安卓app时发现重复点击某一按钮的时候会出现报错,开发修复后提交测试.如果采用手动点击按钮,效率不高,在领导提示下使用按键精灵实现自动操作. 一. 安卓手机按键精灵 ...
- Beta阶段事后分析
1. 设想和目标 1.1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们在Beta阶段任务主要分为两部分,一类是对原功能的扩展,一类是新的博文功能.我们通过规 ...