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对url格式解析的方法
May 13 Python
Python tkinter模块弹出窗口及传值回到主窗口操作详解
Jul 28 Python
python 基本数据类型占用内存空间大小的实例
Jun 12 Python
使用python实现快速搭建简易的FTP服务器
Sep 12 Python
PYQT5实现控制台显示功能的方法
Jun 25 Python
pytorch打印网络结构的实例
Aug 19 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
Django models filter筛选条件详解
Mar 16 Python
python算的上脚本语言吗
Jun 22 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
Oct 10 Python
python连接mongodb数据库操作数据示例
Nov 30 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
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
PHP答题类应用接口实例
2015/02/09 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
php异常处理捕获错误整理
2019/09/23 PHP
基于JQuery的密码强度验证代码
2010/03/01 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
js星星评分效果
2014/07/24 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
javascript判断网页是关闭还是刷新
2015/09/12 Javascript
浅析JavaScript回调函数应用
2016/05/22 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
巧妙运用v-model实现父子组件传值的方法示例
2019/04/07 Javascript
js实现坦克大战游戏
2020/02/24 Javascript
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
python实现井字棋游戏
2020/03/30 Python
Python中遍历字典过程中更改元素导致异常的解决方法
2016/05/12 Python
对python tkinter窗口弹出置顶的方法详解
2019/06/14 Python
python文件操作的简单方法总结
2019/11/07 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
Keras自动下载的数据集/模型存放位置介绍
2020/06/19 Python
Python中logging日志的四个等级和使用
2020/11/17 Python
Python爬虫自动化获取华图和粉笔网站的错题(推荐)
2021/01/08 Python
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
日本运动品牌美津浓官方购物网站:MIZUNO SHOP
2016/08/21 全球购物
澳大利亚相机之家:Camera House
2017/11/30 全球购物
Sneaker Studio波兰:购买运动鞋
2018/04/28 全球购物
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
巴西24小时在线药房:Drogasil
2020/06/20 全球购物
《爱的教育》读书心得
2014/11/08 职场文书
国博复兴之路观后感
2015/06/02 职场文书
php中配置文件保存修改操作 如config.php文件的读取修改等操作
2021/05/12 PHP
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang