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 相关文章推荐
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
pyqt5实现登录界面的模板
May 30 Python
python中时间、日期、时间戳的转换的实现方法
Jul 06 Python
python Kmeans算法原理深入解析
Aug 23 Python
python sqlite的Row对象操作示例
Sep 11 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
pytorch AvgPool2d函数使用详解
Jan 03 Python
np.random.seed() 的使用详解
Jan 14 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
Pycharm pyuic5实现将ui文件转为py文件,让UI界面成功显示
Apr 08 Python
Django生成数据库及添加用户报错解决方案
Oct 09 Python
Python 可视化神器Plotly详解
Dec 26 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
自动分页的不完整解决方案
2007/01/12 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
2013/06/21 PHP
CodeIgniter安全相关设置汇总
2014/07/03 PHP
PHP+MySQL删除操作实例
2015/01/21 PHP
php常用数组函数实例小结
2016/12/29 PHP
基于ThinkPHP删除目录及目录文件函数
2020/10/28 PHP
javascript语句中的CDATA标签的意义
2007/05/09 Javascript
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
Fullpage.js固定导航栏-实现定位导航栏
2016/03/17 Javascript
原生JavaScript编写canvas版的连连看游戏
2016/05/29 Javascript
JS实现图片垂直居中显示小结
2016/12/13 Javascript
微信小程序 Canvas增强组件实例详解及源码分享
2017/01/04 Javascript
JS实现中国公民身份证号码有效性验证
2017/02/20 Javascript
javascript编写简易计算器
2017/05/06 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
vue基于两个计算属性实现选中和全选功能示例
2019/02/08 Javascript
axios实现简单文件上传功能
2019/09/25 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
Python装饰器语法糖
2019/01/02 Python
Django shell调试models输出的SQL语句方法
2019/08/29 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
公益广告语集锦
2014/03/13 职场文书
倡导文明标语
2014/06/16 职场文书
健康状况证明书
2014/11/26 职场文书
张丽莉事迹观后感
2015/06/16 职场文书
JavaScript嵌入百度地图API的最详细方法
2021/04/16 Javascript
postgresql中如何执行sql文件
2023/05/08 PostgreSQL