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 相关文章推荐
PyQt5每天必学之关闭窗口
Apr 19 Python
python 创建一个空dataframe 然后添加行数据的实例
Jun 07 Python
python调用百度语音识别api
Aug 30 Python
Python实现点阵字体读取与转换的方法
Jan 29 Python
Python中调用其他程序的方式详解
Aug 06 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
Mar 05 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
Keras实现将两个模型连接到一起
May 23 Python
Python如何安装第三方模块
May 28 Python
Python常用数字处理基本操作汇总
Sep 10 Python
Python自动化测试基础必备知识点总结
Feb 07 Python
如何用用Python将地址标记在地图上
Feb 07 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高手?学会“懒惰”的编程
2006/12/05 PHP
学习php中的正则表达式
2014/08/17 PHP
php将图片保存入mysql数据库失败的解决方法
2014/12/27 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
2015/11/10 PHP
PHP用mysql_insert_id()函数获得刚插入数据或当前发布文章的ID
2016/11/25 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
PHP二维数组去重算法
2016/12/17 PHP
laravel中命名路由的使用方法
2017/02/24 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
javascript工厂方式定义对象
2014/12/26 Javascript
jQuery中on()方法用法实例
2015/01/19 Javascript
jQuery中delegate()方法用法实例
2015/01/19 Javascript
jQuery实现简单的文件上传进度条效果
2020/03/26 Javascript
Jquery+ajax+JAVA(servlet)实现下拉菜单异步取值
2016/03/23 Javascript
基于javascript实现图片切换效果
2016/04/17 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
详解vue+axios给开发环境和生产环境配置不同的接口地址
2019/08/16 Javascript
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
Python urllib2运行过程原理解析
2020/06/04 Python
python爬虫爬取图片的简单代码
2021/01/18 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
大学本科生的个人自我评价
2013/12/09 职场文书
酒鬼酒广告词
2014/03/21 职场文书
单位法定代表人授权委托书
2014/09/20 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
毕业生个人总结
2015/02/28 职场文书
通知的格式范文
2015/04/27 职场文书
钓鱼岛事件感想
2015/08/11 职场文书