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中实现的RC4算法
Feb 14 Python
关于Python中空格字符串处理的技巧总结
Aug 10 Python
python快速建立超简单的web服务器的实现方法
Feb 17 Python
python3模块smtplib实现发送邮件功能
May 22 Python
Python 文本文件内容批量抽取实例
Dec 10 Python
ubuntu上安装python的实例方法
Sep 30 Python
Django实现分页显示效果
Oct 31 Python
python 将视频 通过视频帧转换成时间实例
Apr 23 Python
python学习之panda数据分析核心支持库
May 07 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 Python
Python提取PDF指定内容并生成新文件
Jun 09 Python
Python安装使用Scrapy框架
Apr 12 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异步调用socket实现代码
2012/01/12 PHP
PHP连接SQLServer2005方法及代码
2013/12/26 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
PHP 代码简洁之道(小结)
2019/10/16 PHP
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
动态加载JS文件的三种方法
2013/11/08 Javascript
jquery的trigger和triggerHandler的区别示例介绍
2014/04/20 Javascript
jquery实现在页面加载完毕后获取图片高度或宽度
2014/06/16 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
用console.table()调试javascript
2014/09/04 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
微信小程序的生命周期的详解
2017/10/19 Javascript
jquery实现左右轮播切换效果
2018/01/01 jQuery
JavaScript比较同一天的时间大小实例代码
2018/02/09 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
javascript设计模式 ? 状态模式原理与用法实例分析
2020/04/22 Javascript
Python学生成绩管理系统简洁版
2020/04/05 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
Pycharm 2020年最新激活码(亲测有效)
2020/09/18 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
CSS3 实现弹跳的小球动画
2020/10/26 HTML / CSS
JVM是一个编译程序还是解释程序
2012/09/11 面试题
怎样写演讲稿
2014/01/04 职场文书
运动会开幕式邀请函
2014/02/03 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
2014年销售员工作总结
2014/12/01 职场文书
爱心捐款感谢信
2015/01/20 职场文书
工作岗位职责范本
2015/02/15 职场文书
2014年个人总结范文
2015/03/09 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
教师年度考核自我评鉴
2015/08/11 职场文书
Python使用Web框架Flask开发项目
2022/06/01 Python