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实现删除Android工程中的冗余字符串
Jan 19 Python
详解Django框架中的视图级缓存
Jul 23 Python
Python程序中用csv模块来操作csv文件的基本使用教程
Mar 03 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
Jun 23 Python
对django中render()与render_to_response()的区别详解
Oct 16 Python
Python 通过监听端口实现唯一脚本运行方式
May 05 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
Python如何读取、写入CSV数据
Jul 28 Python
Python如何测试stdout输出
Aug 10 Python
MAC平台基于Python Appium环境搭建过程图解
Aug 13 Python
python利用opencv保存、播放视频
Nov 02 Python
vue.js刷新当前页面的实例讲解
Dec 29 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
[EPIC] Larva vs Flash ZvT @ Crossing Field [2017-10-09]
2020/03/17 星际争霸
PHP中include与require使用方法区别详解
2013/10/19 PHP
PHP多维数组转一维数组的简单实现方法
2015/12/23 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
看了就知道什么是JSON
2007/12/09 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
jQuery实现表头固定效果的实例代码
2013/05/24 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
Backbone.js的Hello World程序实例
2015/06/19 Javascript
jQuery网页选项卡插件rTabs用法实例分析
2015/08/26 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
JS实现简单的点赞与踩功能示例
2018/12/05 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
微信小程序实现判断是分享到群还是个人功能示例
2019/05/03 Javascript
JS匿名函数内部this指向问题详析
2019/05/10 Javascript
vue-router源码之history类的浅析
2019/05/21 Javascript
vue实现瀑布流组件滑动加载更多
2020/03/10 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
Python实现图像几何变换
2015/07/06 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
python实现分页效果
2017/10/25 Python
python使用tkinter实现简单计算器
2018/01/30 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
弄清Pytorch显存的分配机制
2020/12/10 Python
请假条怎么写
2014/04/10 职场文书
超市活动计划书
2014/04/24 职场文书
后勤管理员岗位职责
2014/08/27 职场文书
公司清洁工岗位职责
2015/04/15 职场文书
力克胡哲观后感
2015/06/10 职场文书
通讯稿格式及范文
2015/07/22 职场文书
如何使用注解方式实现 Redis 分布式锁
2022/07/23 Redis
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis