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 相关文章推荐
深入理解Javascript中的this关键字
Mar 27 Python
使用Python的Django框架实现事务交易管理的教程
Apr 20 Python
Python读写txt文本文件的操作方法全解析
Jun 26 Python
Python实现PS滤镜碎片特效功能示例
Jan 24 Python
python实现音乐下载的统计
Jun 20 Python
python安装pil库方法及代码
Jun 25 Python
python psutil监控进程实例
Dec 17 Python
基于python实现计算两组数据P值
Jul 10 Python
详解Python中Pyyaml模块的使用
Oct 08 Python
Django中如何用xlwt生成表格的方法步骤
Jan 31 Python
基于Python 函数和方法的区别说明
Mar 24 Python
python中pd.cut()与pd.qcut()的对比及示例
Jun 16 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 数组入门教程小结
2009/05/20 PHP
腾讯QQ php程序员面试题目整理
2010/06/08 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
windows环境下使用Composer安装ThinkPHP5
2018/05/18 PHP
User Scripts: Video Download by User Scripts
2007/05/14 Javascript
js类后台管理菜单类-MenuSwitch
2007/09/12 Javascript
ASP中进行HTML数据及JS数据编码函数
2009/11/11 Javascript
文件编码导致jquery失效的解决方法
2013/06/26 Javascript
解析dom中的children对象数组元素firstChild,lastChild的使用
2013/07/10 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
JS实现无限级网页折叠菜单(类似树形菜单)效果代码
2015/09/17 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
webpack4+react多页面架构的实现
2018/10/25 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
[07:09]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant 选手采访
2021/03/11 DOTA
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
树莓派实现移动拍照
2019/06/22 Python
Django2 连接MySQL及model测试实例分析
2019/12/10 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
canvas仿写贝塞尔曲线的示例代码
2017/12/29 HTML / CSS
经济学博士求职自荐信范文
2013/11/23 职场文书
共产党员公开承诺书
2014/03/25 职场文书
协议书格式
2014/04/23 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
党支部鉴定意见
2015/06/02 职场文书
大学同学聚会感言
2015/07/30 职场文书
Nginx反向代理配置的全过程记录
2021/06/22 Servers
redis cluster支持pipeline的实现思路
2021/06/23 Redis