python内置模块~shutil
shutil
--High-level file operations,高级的文件操作模块~
shutil 模块的使用主要包括对文件及目录的移动、复制、打包、压缩(解压)、删除等操作。是对os模块的一个补充~
使用示例
shutil.copyfileobj(fsrc, fdst[, length])
复制一个文件到另一个文件。
copyfileobj函数源码:
def copyfileobj(fsrc, fdst, length=16*1024):"""copy data from file-like object fsrc to file-like object fdst"""while 1:buf = fsrc.read(length) # length 为缓冲大小if not buf:breakfdst.write(buf)
示例:
import shutilf_read = open(file='/Users/luyi/tmp/a.txt', mode='r')
f_write = open(file='/Users/luyi/tmp/b.txt', mode='w')shutil.copyfileobj(f_read, f_write)
使用 copyfileobj 进行复制略显麻烦,源文件和目标文件都需要打开(open)才能进行复制操作~
shutil.copyfile(src, dst)
同样是复制操作~
示例:
import shutilf_src = '/Users/luyi/tmp/a.txt'
f_dest = '/Users/luyi/tmp/b.txt'
shutil.copyfile(f_src, f_dest)
相比于 copyfileobj,copyfile 实现的复制操作要简单的多,在日常的使用中,也是更多的使用 copyfile 函数。其实在内部,copyfile 函数调用了 copyfileobj函数~
shutil.copymode(src, dst)
复制文件的权限,即读写权限,不会复制源文件的内容及属主和属组~
示例:
➜ ls -l
total 16
-rw-rw-r-- 1 baby wheel 4 Nov 7 22:46 a.txt
-rw-r--r-- 1 root wheel 4 Nov 7 22:46 b.txt>>> import shutil
>>> shutil.copymode('a.txt','b.txt')➜ ls -l
total 16
-rw-rw-r-- 1 baby wheel 4 Nov 7 22:46 a.txt
-rw-rw-r-- 1 root wheel 4 Nov 7 22:46 b.txt
复制权限的过程,源文件和目标文件都必须存在,若目标文件不存在,则会报错。这里区别于 copyfile 函数,copyfile函数的目标文件可以存在也可以不存在,不存在则直接进行复制,若存在则进行覆盖~
➜ tmp ll
total 8
-rw-r--r-- 1 baby staff 4B Nov 6 23:48 a.txt>>> import shutil
>>> shutil.copymode('a.txt','b.txt')
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 91, in copymodeos.chmod(dst, mode)
OSError: [Errno 2] No such file or directory: 'b.txt'
shutil.copystat(src, dst)
复制文件的所有状态信息,包括 mode bits,atime,mtime,flags,但不复制文件内容,以及文件的属主和属组~
➜ ls -l
total 16
-rw-rw-r-- 1 baby wheel 4 Nov 7 22:46 a.txt
-rw-r--r-- 1 root wheel 4 Nov 7 22:50 b.txt
➜ stat a.txt
16777220 8603112152 -rw-rw-r-- 1 baby wheel 0 4 "Nov 7 22:48:16 2018" "Nov 7 22:46:22 2018" "Nov 7 22:46:46 2018" "Nov 7 22:46:06 2018" 4096 8 0 a.txt
➜ stat b.txt
16777220 8603112261 -rw-r--r-- 1 root wheel 0 4 "Nov 7 22:50:32 2018" "Nov 7 22:50:37 2018" "Nov 7 22:50:37 2018" "Nov 7 22:50:32 2018" 4096 8 0 b.txt>>> import shutil
>>> shutil.copystat('a.txt','b.txt') # 执行复制状态操作
stat 输出的信息中包含3个时间,其中第一个是atime,第二个是mtime,最后一个是ctime。复制完成后,查看两个文件的状态信息:
➜ ls -l
total 16
-rw-rw-r-- 1 baby wheel 4 Nov 7 22:46 a.txt
-rw-rw-r-- 1 root wheel 4 Nov 7 22:46 b.txt
➜ stat a.txt
16777220 8603112152 -rw-rw-r-- 1 baby wheel 0 4 "Nov 7 22:48:16 2018" "Nov 7 22:46:22 2018" "Nov 7 22:46:46 2018" "Nov 7 22:46:06 2018" 4096 8 0 a.txt
➜ stat b.txt
16777220 8603112261 -rw-rw-r-- 1 root wheel 0 4 "Nov 7 22:48:16 2018" "Nov 7 22:46:22 2018" "Nov 7 22:52:02 2018" "Nov 7 22:46:22 2018" 4096 8 0 b.txt
可以看到源文件 a.txt 的 atime,mtime 和 mode bits 已经复制到 b.txt 上,文件的属主和属组 并没有发生变化。其中文件的 ctime 由系统自行维护~
shutil.copy(src, dst)
复制文件的内容以及权限,即先 copyfile,然后再 copymode~
shutil.copy2(src, dst)
复制文件的内容以及文件的状态信息,先 copyfile,再 copystat~
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的复制目录,以及文件的所有状态信息(不包括文件的属主和属组)
示例:
➜ ls -l test1
total 16
-rw-rw-r-- 1 baby wheel 4 Nov 7 22:46 a.txt
-rw-r--r-- 1 root wheel 4 Nov 7 22:56 b.txt>>> import shutil
>>> shutil.copytree('test1', 'test2')
'test2'➜ ls -l test2
total 16
-rw-rw-r-- 1 root wheel 4 Nov 7 22:46 a.txt
-rw-r--r-- 1 root wheel 4 Nov 7 22:56 b.txt
shutil.rmtree(path[, ignore_errors[, onerror]])
递归的删除文件~
示例:
➜ ls -l test1
total 16
-rw-rw-r-- 1 baby wheel 4 Nov 7 22:46 a.txt
-rw-r--r-- 1 root wheel 4 Nov 7 22:56 b.txt>>> import shutil
>>> shutil.rmtree('test1')
rmtree相当于 rm -fr 命令,谨慎操作~
shutil.move(src, dst)
递归的移动文件,作用与通过move命令移动目录类似~
示例:
➜ tmp ll
total 0
drwxr-xr-x 4 baby staff 128B Nov 7 23:09 test>>> import shutil
>>> shutil.move('test','/Users/luyi')
'/Users/luyi/test'➜ tmp ll /Users/luyi/test
total 16
-rw-r--r-- 1 baby staff 4B Nov 6 23:48 a.txt
-rw-r--r-- 1 baby staff 4B Nov 7 23:06 b.txt
shutil.make_archive(base_name, format,root_dir=None,...)
打包或压缩文件,并且返回操作后的文件路径~
参数说明:
base_name:压缩包的文件名(abc.tar.gz,则base_name为abc),也可以是绝对路径;若是文件名,则压缩后的文件默认存放于当前目录,若是绝对路径,则压缩有的文件就保存到指定路径~
format:指定压缩或打包的类型,"zip","tar","bztar","gztar"
root_dir:需要压缩的文件或目录路径
owner:属主,默认为当前用户
group:属组,默认为当前组
logger:指定日志对象,通常是logging.Logger对象~
示例:
➜ tmp ll
total 0
drwxr-xr-x 4 baby staff 128B Nov 7 23:09 test>>> import shutil
>>> shutil.make_archive(base_name='test',format='zip',root_dir='test')
'/Users/luyi/tmp/test.zip'
>>> shutil.make_archive(base_name='test',format='gztar',root_dir='test')
'/Users/luyi/tmp/test.tar.gz'
>>> shutil.make_archive(base_name='test',format='tar',root_dir='test')
'/Users/luyi/tmp/test.tar'
>>> shutil.make_archive(base_name='test',format='bztar',root_dir='test')
'/Users/luyi/tmp/test.tar.bz2'➜ tmp ll
total 48
drwxr-xr-x 4 baby staff 128B Nov 7 23:09 test
-rw-r--r-- 1 baby staff 10K Nov 7 23:25 test.tar
-rw-r--r-- 1 baby staff 187B Nov 7 23:25 test.tar.bz2
-rw-r--r-- 1 baby staff 195B Nov 7 23:25 test.tar.gz
-rw-r--r-- 1 baby staff 206B Nov 7 23:25 test.zip
.................^_^
转载于:https://blog.51cto.com/ljbaby/2314269
python内置模块~shutil相关推荐
- 【Python】shutil内置模块复制和重命名文件
在日常工作和生活中,我们经常要复制和重命名文件,如果遇到大量数据处理时,手动去操作非常麻烦,现在我们可以通过python的shutil模块完成,以下主要介绍几种场景: 1.复制一个文件到其他目录,不重 ...
- python内置模块和内置方法
python内置模块 time json re logging random os sys xml pikle shelve getopt uuid subprocess collections fu ...
- python turtle循环图案-Python内置模块turtle绘图详解
urtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x.纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的 ...
- python 通过shutil.move移动图片出错xe5\xb8\xb8\xe7
python 通过shutil.move移动图片,报错 IOError: [Errno 2] No such file or directory: '/home/a/photo\xe5\xb8\xb. ...
- python的shutil模块是内置的_Python之shutil模块11个常用函数详解,python内置函数是什么...
Python之shutil模块11个常用函数详解,python内置函数是什么 shutil 是 Python 中的高级文件操作模块,与os模块形成互补的关系,os主要提供了文件或文件夹的新建.删除.查 ...
- python内置模块_三分钟读懂Python内置模块collections
collections模块 Python内置模块,在内置数据类型(dict.list.set.tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter.deque.d ...
- python config模块_用Python内置模块处理ini配置文件
原标题:用Python内置模块处理ini配置文件 简介 开发人员每天都在处理一些大型而复杂的项目, 而配置文件会帮到我们并节省不少时间.在处理配置文件过程中,无需更改源代码本身,只需要调整配置文件即可 ...
- python内置模块(三)
----------------------------接 python内置模块(二)--------------------------- 八. shelve模块 shelve模块是一个简 ...
- python内置模块re_python内置模块[re]
python内置模块[re] re模块: python的re模块(Regular Expression正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...
最新文章
- 精通SERV-U配置文件
- Stack:删除并返回栈顶元素?
- UNIX再学习 -- 网络与网络协议
- 云上故事 | “电”亮数字生活,阿里云助力南方电网智能调度
- Packet for query is too large
- 软件开发实训需要用到的算法和结构_软件开发实习个人总结
- .htaccess跳转https
- 机器学习模型 知乎_知乎CTO李大海:谢邀,来分享下内容社区的AI架构搭建与应用...
- java 枚举放那个包,java枚举,包装类,math使用
- LaTex符号大全(LaTeX_Symbols)
- 管理信息系统(MIS)概述
- C++之文件批量改名
- C语言this is a string,求一道C语言题目The aim of this exercise is to write a C program tha
- RFID固定资产管理系统中的RFID标签的使用-新导智能
- TortoiseSVN文件夹及文件图标不显示解决方法
- IntelliJ IDEA自动生成注释的author
- ddn(ddnnpap)
- Java 并发编程之美:并发编程高级篇之一
- Chrome的下载与安装使用-Windows64位系统(2)【图文并茂的小白级教程】
- html中页面背景属性,css背景属性有哪些?