Python3 shutil(高级文件操作模块)实例用法总结


Posted in Python onFebruary 19, 2020

1、shutil是shell

utility的缩写

shutil.move直接从一个地方挪到另一个地方,而os.rename常常只能重命名,不能挪动位置。

功能是:

>>>shutil.move('old.txt',r'c:datarchive')
>>>shutil.copy('old.txt',r'c:datarchive')
>>>os.remove('junk.dat')

2、高级文件操作(拷贝/移动/压缩/解压缩)

#!/usr/bin/env python
# coding=utf-8
__author__ = 'zhuo'
__date__ = '2017/5/25'
# shutil_demo.py 高级文件操作(拷贝 / 移动 / 压缩 / 解压缩)

import shutil


def shutil_demo():
  # 拷贝文件
  shutil.copy2('file.txt', 'temp.txt')

  # 拷贝目录
  shutil.copytree("root", "temp", symlinks=False, ignore=shutil.ignore_patterns("*.pyc"), copy_function=shutil.copy2, ignore_dangling_symlinks=True)

  # 删除目录
  shutil.rmtree("temp", ignore_errors=True)

  # 移动文件/目录
  shutil.move("root", "temp", copy_function=shutil.copy2)

  # 获取磁盘使用空间
  total, used, free = shutil.disk_usage(".")
  print("当前磁盘共: %iGB, 已使用: %iGB, 剩余: %iGB"%(total / 1073741824, used / 1073741824, free / 1073741824))

  # 压缩文件
  shutil.make_archive('Box', 'zip', 'temp')

  # 解压文件
  shutil.unpack_archive('Box.zip')



def shutil_func():
  # 文件和目录操作
  # shutil.copyfileobj(fsrc, fdst[, length]) // 拷贝文件内容, 将fsrc文件里的内容copy到fdst文件中, length:缓冲区大小
  shutil.copyfileobj(open('file.txt', 'r'), open('temp.txt', 'w'))
  # shutil.copyfile(src, dst, *, follow_symlinks=True) // 拷贝文件内容, 同copyfileobj, 如果dst=src,抛SameFileError异常, dst存在则替换
  dst = shutil.copyfile('file.txt', 'temp.txt')
  # shutil.copymode(src, dst, *, follow_symlinks=True) // 仅拷贝权限, 其他信息不受影响
  shutil.copymode('file.txt', 'temp.txt')
  # shutil.copystat(src, dst, *, follow_symlinks=True) // 拷贝状态(权限 / 最后访问时间 / 上次修改时间 / 标志), 其他不受迎影响
  shutil.copystat('file.txt', 'temp.txt')
  # shutil.copy(src, dst, *, follow_symlinks=True) // 拷贝文件(数据 / 权限)
  dst = shutil.copy('file.txt', 'temp.txt')
  # shutil.copy2(src, dst, *, follow_symlinks=True) // 拷贝文件(尝试保留所有元数据) (不能拷贝创建时间,该时间可通过修改系统时间再创建文件来实现)
  dst = shutil.copy2('file.txt', 'temp.txt')
  # shutil.ignore_patterns(*patterns)
  # symlinks:True(复制链接) / False(复制文件), ignore=ignore_patterns("") // 忽略的文件, copy_function=自定义复制函数, ignore_dangling_symlinks:True(忽略文件不存在异常) / False(错误列表中添加异常)
  # shutil.copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2, ignore_dangling_symlinks=False) // 递归的复制根目录下的整个目录树
  dst = shutil.copytree("root", "temp", symlinks=False, ignore=shutil.ignore_patterns("*.pyc"), copy_function=shutil.copy2, ignore_dangling_symlinks=True)
  # shutil.rmtree(path, ignore_errors=False, onerror=None) // 删除整个目录树, ignore_errors:是否忽略删除失败错误, onerror=def error(func, path, excinfo)
  shutil.rmtree("temp", ignore_errors=True)
  # shutil.move(src, dst, copy_function=copy2) // 递归移动文件/目录, 目录存在则移动目录, 文件存在则覆盖
  dst = shutil.move("root", "temp", copy_function=shutil.copy2)
  total, used, free = shutil.disk_usage(".") # 给定路径的磁盘使用情况统计信息
  # shutil.chown(path, user=None, group=None) // 修改用户和组 (Unix可用)
  # shutil.which(cmd, mode=os.F_OK | os.X_OK, path=None) // 可执行文件路径, path:要查找的路径,未指定使用os.environ的结果
  path_str = shutil.which("python")


  # 异常
  try: pass
  except shutil.SameFileError: pass # copyfile()时,源和目录是同一个文件时,抛此异常
  except shutil.Error: pass # copytree()时, 多文件操作时引发的异常, 异常包含(srcname, dstname, excinfo)



  # 压缩文件操作 (封装了zipfile / tarfile)
  # 创建归档文件 base_name:压缩包文件名, format:格式 zip / tar / bztar / xztar / gztar, root_dir:被归档的根目录(默认当前目录)
  # base_dir:保存归档文件的目录(默认当前目录) verbose:已弃用 dry_run:True(不创建归档,但记录日志), owner:用户, group:用户组, logger:日志
  # shutil.make_archive(base_name, format[, root_dir[, base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])
  dst = shutil.make_archive('Box', 'zip', 'temp') # 注意:root_dir / base_dir至少写一个,不然会造成压缩包再次被打包的情况
  # 分拆归档, filename:文件名, extract_dir:解压到目录(默认当前目录), format:格式 (未提供,根据扩展名查找,未找到引发ValueError)
  # shutil.unpack_archive(filename[, extract_dir[, format]])
  shutil.unpack_archive('Box.zip')

  lists = shutil.get_archive_formats() # 返回支持的归档格式列表[(format, info)]
  lists = shutil.get_unpack_formats() # 返回所有注册格式的列表[(name, extensions, description)]

  # 注册压缩格式, name:格式名, function:def func(base_name, base_dir, owner, group, dry_run, logger), extra_args:额外参数, description:说明信息
  # shutil.register_archive_format(name, function[, extra_args[, description]])
  # shutil.unregister_archive_format(name) // 注销压缩格式
  # 注册解压格式 name:格式名, extensions:扩展名列表, function:实现函数 def unpack(filename, extract_dir), extra_args:额外参数(name, value), description:说明
  # shutil.register_unpack_format(name, extensions, function[, extra_args[, description]])
  # shutil.unregister_unpack_format(name) // 注销解压格式



  # 终端
  # shutil.get_terminal_size(fallback=(columns, lines))
  columns, lines = shutil.get_terminal_size() # 查询终端大小(宽, 高), 无法查询返回默认大小(80, 24)



if __name__ == "__main__":
  shutil_demo()

  # shutil_func()
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

知识点补充

shutil 模块

shutil可以简单地理解为sh + util,shell工具的意思。shutil模块是对os模块的补充,主要针对文件的拷贝、删除、移动、压缩和解压操作。

拷贝文件, shutil会自动识别拷贝的到底是文件还是文件夹, 如果存在同名的文件将会自动进行覆盖。

以上就是三水点靠木小编给大家整理的全部相关知识点,感谢大家的学习和支持。

Python 相关文章推荐
Python GAE、Django导出Excel的方法
Nov 24 Python
python基础教程之自定义函数介绍
Aug 29 Python
python binascii 进制转换实例
Jun 12 Python
Django框架 信号调度原理解析
Sep 04 Python
python中bytes和str类型的区别
Oct 21 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
Feb 27 Python
python图片剪裁代码(图片按四个点坐标剪裁)
Mar 10 Python
浅谈Python中的继承
Jun 19 Python
记一次Django响应超慢的解决过程
Sep 17 Python
简述python&pytorch 随机种子的实现
Oct 07 Python
Python实现中英文全文搜索的示例
Dec 04 Python
用Python实现一个打字速度测试工具来测试你的手速
May 28 Python
python logging设置level失败的解决方法
Feb 19 #Python
Python实现病毒仿真器的方法示例(附demo)
Feb 19 #Python
python内打印变量之%和f的实例
Feb 19 #Python
Python 实现日志同时输出到屏幕和文件
Feb 19 #Python
python 控制台单行刷新,多行刷新实例
Feb 19 #Python
python tqdm 实现滚动条不上下滚动代码(保持一行内滚动)
Feb 19 #Python
python 解决tqdm模块不能单行显示的问题
Feb 19 #Python
You might like
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
JavaScript中SQL语句的应用实现
2010/05/04 Javascript
读jQuery之十四 (触发事件核心方法)
2011/08/23 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
javascript实现计时器的简单方法
2016/02/21 Javascript
JS中frameset框架弹出层实例代码
2016/04/01 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
js中获取时间new Date()的全面介绍
2016/06/20 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
2017/12/26 Javascript
JavaScript实现JSON合并操作示例【递归深度合并】
2018/09/07 Javascript
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
node crawler如何添加promise支持
2020/02/01 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
vant时间控件使用方法详解
2020/12/24 Javascript
[10:53]2018DOTA2国际邀请赛寻真——EG
2018/08/11 DOTA
[42:32]Secret vs Optic 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
使用Python写个小监控
2016/01/27 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
解决Python对齐文本字符串问题
2019/08/28 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
CSS3实战第一波 让我们尽情的圆角吧
2010/08/27 HTML / CSS
项目副经理岗位职责
2013/12/30 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
《陈毅探母》教学反思
2014/05/01 职场文书
超越自我演讲稿
2014/05/21 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
史上最全的军训拉歌口号
2015/12/25 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书