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 从远程服务器下载东西的代码
Feb 10 Python
Python模拟用户登录验证
Sep 11 Python
用python编写第一个IDA插件的实例
May 29 Python
Python实现读取机器硬件信息的方法示例
Jun 09 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
Jun 22 Python
python range()函数取反序遍历sequence的方法
Jun 25 Python
python爬虫之线程池和进程池功能与用法详解
Aug 02 Python
基于Django实现日志记录报错信息
Dec 17 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 Python
python 下载m3u8视频的示例代码
Nov 11 Python
python中strip(),lstrip(),rstrip()函数的使用讲解
Nov 17 Python
python多次执行绘制条形图
Apr 20 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边学边教》(01.开篇――准备工作)
2006/12/13 PHP
深入解析php之sphinx
2013/05/15 PHP
php导入excel文件到mysql数据库的方法
2015/01/14 PHP
微信公众平台开发教程④ ThinkPHP框架下微信支付功能图文详解
2019/04/10 PHP
微信小程序发送订阅消息的方法(php 为例)
2019/10/30 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
innerHTML,outerHTML,innerTEXT三者之间的区别
2007/01/28 Javascript
广告切换效果(缓动切换)
2009/05/27 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
Webpack 实现 Node.js 代码热替换
2015/10/22 Javascript
Canvas实现动态的雪花效果
2017/02/13 Javascript
如何重置vue打印变量的显示方式
2017/12/06 Javascript
详解vue添加删除元素的方法
2018/06/30 Javascript
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
微信小程序登录按钮遮罩浮层效果的实现方法
2018/12/16 Javascript
mpvue 项目初始化及实现授权登录的实现方法
2020/07/20 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
2020/12/26 Vue.js
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
python使用7z解压软件备份文件脚本分享
2014/02/21 Python
高质量Python代码编写的5个优化技巧
2017/11/16 Python
Python3实现的画图及加载图片动画效果示例
2018/01/19 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
全球性的在线时尚男装零售商:boohooMAN
2016/12/17 全球购物
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
怎样让char类型的东西转换成int类型
2013/12/09 面试题
广州盈通面试题
2015/12/05 面试题
大学团支书的自我评价分享
2013/12/14 职场文书
《唯一的听众》教学反思
2014/02/20 职场文书
地质灾害防治方案
2014/05/14 职场文书
新闻发布会策划方案
2014/06/12 职场文书
民间个人借款协议书
2014/09/30 职场文书
三下乡个人总结
2015/03/04 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技