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网络编程学习笔记(四):域名系统
Jun 09 Python
编程语言Python的发展史
Sep 26 Python
Python类的多重继承问题深入分析
Nov 09 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
Jun 23 Python
Python实现简单的四则运算计算器
Nov 02 Python
Python实现的txt文件去重功能示例
Jul 07 Python
idea创建springMVC框架和配置小文件的教程图解
Sep 18 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
python3下载抖音视频的完整代码
Jun 05 Python
对Python函数设计规范详解
Jul 19 Python
python打印直角三角形与等腰三角形实例代码
Oct 20 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
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
PHP对象实例化单例方法
2017/01/19 PHP
thinkPHP5.0框架简单配置作用域的方法
2017/03/17 PHP
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
HTML DOM的nodeType值介绍
2011/03/31 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
JavaScript实现为指定对象添加多个事件处理程序的方法
2015/04/17 Javascript
Bootstrap入门书籍之(零)Bootstrap简介
2016/02/17 Javascript
详解AngularJS脏检查机制及$timeout的妙用
2017/06/19 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
详解extract-text-webpack-plugin 的使用及安装
2018/06/12 Javascript
Python的print用法示例
2014/02/11 Python
python实现文件名批量替换和内容替换
2014/03/20 Python
Python实现求两个csv文件交集的方法
2017/09/06 Python
用tensorflow实现弹性网络回归算法
2018/01/09 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
python实现ip地址的包含关系判断
2020/02/07 Python
Numpy 理解ndarray对象的示例代码
2020/04/03 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
英国复古皮包品牌:Beara Beara
2018/07/18 全球购物
奢华时尚的创新平台:Baltini
2020/10/03 全球购物
C#如何调用Word并打开一个Word文档
2013/05/08 面试题
质检部职责
2013/12/28 职场文书
新年寄语大全
2014/04/12 职场文书
小学课外活动总结
2014/07/09 职场文书
2014年个人工作总结范文
2014/11/07 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
合同权益转让协议书模板
2014/11/18 职场文书
2015年质量月活动总结报告
2015/03/27 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript