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 相关文章推荐
Tensorflow的可视化工具Tensorboard的初步使用详解
Feb 11 Python
Python打印输出数组中全部元素
Mar 13 Python
pandas数值计算与排序方法
Apr 12 Python
python 实现在Excel末尾增加新行
May 02 Python
使用python存储网页上的图片实例
May 22 Python
centos 安装Python3 及对应的pip教程详解
Jun 28 Python
Python Pandas数据结构简单介绍
Jul 03 Python
详解Django-channels 实现WebSocket实例
Aug 22 Python
python使用yield压平嵌套字典的超简单方法
Nov 02 Python
让你的Python代码实现类型提示功能
Nov 19 Python
Python可变对象与不可变对象原理解析
Feb 25 Python
浅谈keras中Dropout在预测过程中是否仍要起作用
Jul 09 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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
用 PHP5 轻松解析 XML
2006/12/04 PHP
php a simple smtp class
2007/11/26 PHP
深入php socket的讲解与实例分析
2013/06/13 PHP
推荐一款PHP+jQuery制作的列表分页的功能模块
2014/10/14 PHP
php计算整个mysql数据库大小的方法
2015/06/19 PHP
javascript中的startWith和endWith的几种实现方法
2013/05/07 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
javascript中的if语句使用介绍
2013/11/20 Javascript
javascript获取xml节点的最大值(实现代码)
2013/12/11 Javascript
jquery 页面滚动到底部自动加载插件集合
2014/01/31 Javascript
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
2018/12/11 jQuery
python使用循环实现批量创建文件夹示例
2014/03/25 Python
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
使用PDB简单调试Python程序简明指南
2015/04/25 Python
python实现带声音的摩斯码翻译实现方法
2015/05/20 Python
Python中的默认参数详解
2015/06/24 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
2020/02/28 Python
Python要求O(n)复杂度求无序列表中第K的大元素实例
2020/04/02 Python
CSS3中使用RGBa来调节透明度的教程
2016/05/09 HTML / CSS
解锁canvas导出图片跨域的N种姿势小结
2019/01/24 HTML / CSS
甜品店的创业计划书范文
2014/01/02 职场文书
拓展培训心得体会
2014/01/04 职场文书
求职者怎样写自荐信
2014/04/13 职场文书
走群众路线学习笔记
2014/11/06 职场文书
先进学校事迹材料
2014/12/30 职场文书
2015年秋季运动会加油稿
2015/07/22 职场文书
Java基础-封装和继承
2021/07/02 Java/Android
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android