Python shutil模块用法实例分析


Posted in Python onOctober 02, 2019

本文实例讲述了Python shutil模块用法。分享给大家供大家参考,具体如下:

shutil模块

主要作用与拷贝文件用的。

1.shutil.copyfileobj(文件1,文件2):将文件1的数据覆盖copy给文件2。

import shutil
f1 = open("1.txt",encoding="utf-8")
f2 = open("2.txt","w",encoding="utf-8")
shutil.copyfileobj(f1,f2)

2.shutil.copyfile(文件1,文件2):不用打开文件,直接用文件名进行覆盖copy。

import shutil
shutil.copyfile("1.txt","3.txt")

3.shutil.copymode(文件1,文件2):之拷贝权限,内容组,用户,均不变。

def copymode(src,dst):
  """copy mode bits from src to dst"""
  if hasattr(os,'chmod'):
    st = os.stat(stc)
    mode = stat.S_IMODE(st.st_mode)
    os.chmod(dst,mode)

4.shutil.copystat(文件1,文件):只拷贝了权限。

def copystat(src,dst):
  """将所有的状态信息(模式位、时间、时间、标志)从src复制到dst"""
  st = os.stat(src)
  mode = stat.S_IMODE(st.st_mode)
  if hasattr(os, 'utime'):
    os.utime(dst,(st.st_atime,st.st_mtime))
  if hasattr(os, 'chmod')
    os.chmod(dst,mode)
  if hasattr(os, 'chflags') and hasattr(st,'st_flags'):
    try:
      os.chflags(dst, st.st_flags)
    except OSError,why:
      for err in 'EOPNOTSUPP', 'ENOTSUP':
        if hasattr(errno,err) and why.errno == getattr(errno, err):
          break
        else:
          raise

5.shutil.copy(文件1,文件2):拷贝文件和权限都进行copy。

def copy(src,dst):
  """copy data and mode bits ("cp src dst")
  The destination may be a directory.
  """
  if os.path.isdir(dst):
    dst = os.path.join(dst,os.path.basename(src))
    copyfile(src,dst)
    copymode(src,dst)

6.shutil.copy2(文件1,文件2):拷贝了文件和状态信息。

7.shutil.copytree(源目录,目标目录):可以递归copy多个目录到指定目录下。

  • shutil.ignore_patterns(*patterns)
  • shutil.copytree(src, dst, symlinks=False, ignore=None)

递归的去拷贝文件

例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))

8.shutil.rmtree(目标目录):可以递归删除目录下的目录及文件。

9.shutil.move(源文件,指定路径):递归移动一个文件。

10.shutil.make_archive():可以压缩,打包文件。

import shutil
shutil.make_archive("shutil_archive_test","zip","D:\新建文件夹 (2)")

11.shutil.make_archive(base_name, format,...)

创建压缩包并返回文件路径,例如:zip、tar

  • base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
    如:www =>保存至当前路径
    如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
  • format: 压缩包种类,"zip", "tar", "bztar","gztar"
  • root_dir: 要压缩的文件夹路径(默认当前目录)
  • owner: 用户,默认当前用户
  • group: 组,默认当前组
  • logger: 用于记录日志,通常是logging.Logger对象
#将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录
import shutil
ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')
#将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录
import shutil
ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

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

zipfile 压缩解压

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()

tarfile 压缩解压

import tarfile
# 压缩
tar = tarfile.open('your.tar','w')
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()

第二种方法:

import zipfile
z = zipfile.ZipFile("day5.zip","w")
z.write("a")

解压:

z.extractall("a")

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在Python中移动目录结构的方法
Jan 31 Python
详解Python中heapq模块的用法
Jun 28 Python
python+selenium+autoit实现文件上传功能
Aug 23 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
深入理解Python中range和xrange的区别
Nov 26 Python
简单实现python画圆功能
Jan 25 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
python设置随机种子实例讲解
Sep 12 Python
Python如何基于Tesseract实现识别文字功能
Jun 05 Python
解析Python 偏函数用法全方位实现
Jun 26 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 Python
python中os.remove()用法及注意事项
Jan 31 Python
Windows平台Python编程必会模块之pywin32介绍
Oct 01 #Python
Python全栈之列表数据类型详解
Oct 01 #Python
python2和python3应该学哪个(python3.6与python3.7的选择)
Oct 01 #Python
使用Python制作一个打字训练小工具
Oct 01 #Python
Python + Flask 实现简单的验证码系统
Oct 01 #Python
python 矢量数据转栅格数据代码实例
Sep 30 #Python
python多进程间通信代码实例
Sep 30 #Python
You might like
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
php集成开发环境详解
2019/09/24 PHP
jQueryUI的Dialog的简单封装
2010/06/07 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
jquery实现LED广告牌旋转系统图片切换效果代码分享
2015/08/26 Javascript
JavaScript匿名函数之模仿块级作用域
2015/12/12 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
2016/11/21 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
2017/07/07 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
深入理解Vue官方文档梳理之全局API
2017/11/22 Javascript
解决Vue 通过下表修改数组,页面不渲染的问题
2018/03/08 Javascript
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
2019/05/17 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
举例讲解Python中的迭代器、生成器与列表解析用法
2016/03/20 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
在Python中通过threshold创建mask方式
2020/02/19 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
Python 实现微信自动回复的方法
2020/09/11 Python
详解numpy1.19.4与python3.9版本冲突解决
2020/12/15 Python
一个不错的HTML5 Canvas多层点击事件监听实例
2014/04/29 HTML / CSS
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
为什么要做架构设计
2015/07/08 面试题
J2EE面试题大全
2016/08/06 面试题
小学生读书感言
2014/02/12 职场文书
留学经费担保书
2014/05/12 职场文书
老人再婚离婚协议书范本
2014/10/27 职场文书
实名检举信范文
2015/03/02 职场文书
简历自我评价模板
2015/03/11 职场文书
上级领导检查欢迎词
2015/09/30 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
利用Sharding-Jdbc进行分库分表的操作代码
2022/01/22 Java/Android
Win10 最新稳定版本 21H2开始推送
2022/04/19 数码科技