shutil:高层文件操作
介绍
shutil模块包括一些高层文件操作,如赋值和归档
复制文件
import shutil
'''
copyfile将源文件的内容复制到目标文件,如果没有权限写目标文件,则会产生一个IOError
'''
# copyfile(源文件,目的文件)
shutil.copyfile(r"C:\python37\Lib\asyncio\base_futures.py", "copy_base_futures.py")
'''
这个函数底层是使用copyfileobj,copyfileobj接收的是文件句柄。
因此copyfile这个函数会打开输入文件进行读取,所以某些特殊文件(如Unix的设备节点)不可以通过copyfile复制为新的特殊文件。
'''
# copy(源文件, 目的文件或者目录)
'''
对于copyfile来说,必须是文件。如果目的文件我们指定了一个目录(比如temp),得到的依旧是一个名为temp的文件
但是对于copy来说,如果目的文件我们指定了一个目录,那么会将文件拷贝到这个目录里面去,新的文件名和源文件名一致。但如果目录不存在那么和copyfile是一样的。
'''
shutil.copy(r"C:\python37\Lib\asyncio\base_futures.py", r"666")
# 如果存在名为666的目录,那么会在666目录中创建一个名为base_futures.py的文件。如果不存在,那么会在当前目录创建一个名为666的文件
# 如果是copyfile的话,那么无论666这个目录存在与否,都是在当前目录创建一个名为666的文件
# copy2:和copy类似,只不过copy只是拷贝文件内容,copy2除了拷贝文件内容还会拷贝文件的访问和修改时间。
# 得到的文件和源文件的所有特性都相同
复制文件元数据
默认地,在Unix下创建一个新文件时,它会根据当前用户的unmask接收权限。
要把权限从一个文件复制到另外一个文件,可以使用copymode
要为文件复制其他元数据,可以使用copystat
处理目录树
import shutil
'''
shutil包含3个函数来处理目录树。
要把一个目录从一个位置复制到另外一个位置,可以使用copytree,这个函数会递归遍历目录树,将文件复制到目标位置。目标目录不能存在,存在的话会报错
'''
# 别看我目的目录指定的文件的格式,但是还是会创建一个目录,只不过这个目录就叫做aa.py
# 因此执行完之后会在我的当前目录中创建一个名为aa.py的目录,然后会把C:\python37\Lib\asyncio里面的内容全部拷贝到aa.py里面来
shutil.copytree(r"C:\python37\Lib\asyncio", r"aa.py")
# 如果要把一个文件或者目录移动到另外一个位置,可以使用move
# 类似于Unix下的mv命令,如果源和目标都在同一个文件夹中,那么属于重命名。如果不在,那么会先将源文件复制到目标文件,然后再删除源文件
# 这里不再演示
注意:无论拷贝还是move,都是指令的目录里面的内容,目录本身是不会拷贝或者移动的。
查找文件
import shutil
'''
which函数会扫描一个路径以查找一个命名文件。
典型的用法是在环境变量PATH定义的shell搜索路径中查找一个可执行程序。
'''
print(shutil.which("go")) # C:\Go\bin\go.EXE
print(shutil.which("python")) # C:\Python37\python.EXE
print(shutil.which("aaa")) # None
# 除此之外还可以指定路径,如果不指定路径,那么默认是os.environ("PATH")
# 但是查找文件可以使用之前说到的pathlib
import pathlib
p = pathlib.Path(r"C:\python37\Lib\site-packages\pandas")
for name in p.rglob("frame.py"):
print(name)
r'''
C:\python37\Lib\site-packages\pandas\core\frame.py
C:\python37\Lib\site-packages\pandas\core\sparse\frame.py
'''
归档
import shutil
'''
Python的标准库包含很多模块来管理归档文件,如tarfile和zipfile。
另外shutil中也提供了很多更高层的函数来创建和解压归档文件。
get_archive_formats函数可以查看当前系统上支持的所有格式的名字和描述
'''
for name, format in shutil.get_archive_formats():
print(name, ":", format)
'''
bztar : bzip2'ed tar-file
gztar : gzip'ed tar-file
tar : uncompressed tar file
xztar : xz'ed tar-file
zip : ZIP file
'''
# 支持的格式取决于有哪些模块和底层库。因此根据这个例子在哪里运行,它的输出可能会有所变化。
# 可以使用make_archive函数来创建一个新的归档文件,说白了就是压缩包。
# shutil.make_archive(压缩之后的文件名, 压缩的格式, 要压缩的文件或目录)
# 会自动将压缩之后的文件名和压缩的格式组合起来
shutil.make_archive(r"asyncio", "zip", r"C:\python37\Lib\asyncio")
# 表示将C:\python37\Lib\asyncio下面的所有文件打包成zip格式放到当前目录下,压缩后的文件叫做asyncio.zip
# 当然压缩之后的文件名还可以是一个路径,如果是"D:\satori\asyncio"的话,那么得到的就是D:\satori\asyncio.zip,总之就是将其和压缩的格式组合起来
# 除此之外,还可以对一个压缩包进行解包
# shutil.unpack_archive(压缩包的名字, 解压到的位置, 压缩格式)
# 另外压缩格式如果不传,那么会自动根据压缩包的扩展名来判断到底该采用哪种格式来解压缩
文件系统空间
import shutil
'''
完成一个长时间运行、可能耗尽可用空间的操作之前,最好先检查本地文件系统,来看看有多少可用的空间,这会很有用。
disk_usage函数会返回一个元组,包括总空间、当前正在使用的空间、以及未用的空间(自由空间)
'''
total_bytes, used_bytes, free_bytes = shutil.disk_usage("C:")
print(total_bytes / 1024 / 1024 / 1024) # 222.78890991210938
print(used_bytes / 1024 / 1024 / 1024) # 51.60057830810547
print(free_bytes / 1024 / 1024 / 1024) # 171.1883316040039
# 除此之外可以使用psutil这个模块
import psutil
# 可以看到,帮我们把所用比例都算出来了,目前用了百分之23.2
print(psutil.disk_usage("C:")) # sdiskusage(total=239217770496, used=55405699072, free=183812071424, percent=23.2)
shutil:高层文件操作的更多相关文章
- python3之shutil高级文件操作
1.shutil高级文件操作模块 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作.对单个文件的操作也可参见os模块. 2.shutil模块的拷 ...
- shutil 高级文件操作
High-level file operations 高级的文件操作模块,官网:https://docs.python.org/2/library/shutil.html# os模块提供了对目录或者 ...
- python模块之shutil高级文件操作
简介 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作.对单个文件的操作也可参见os模块. 注意即便是更高级别的文件复制函数(shutil.co ...
- Python档案袋( 命令行操作 及 Os与Shutil文件操作补充 )
调用系统命令 import os #调用系统命令,输出只能输出到屏幕上,不能用变量接收 os.system("ipconfig") #调用系统命令,并把执行结果存到变量中 res= ...
- python os&shutil 文件操作
python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...
- 【Python】 高级文件操作 shutil
shutil 很多时候,我想要对文件进行重命名,删除,创建等操作的时候的想法就是用subprocess开一个子进程来处理,但是实际上shutil可以更加方便地提供os的文件操作接口,从而可以一条语句搞 ...
- Python中文件操作2——shutil模块
1 文件操作 文件有很多的操作,之前的文件操作中介绍了内建函数对文件的打开.读取以及写入,这三种操作是对文件基本的使用.文件还有复制.删除.移动.改变文件的属主属组等操作.下面主要看os模块和shut ...
- Python的高级文件操作(shutil模块)
Python的高级文件操作(shutil模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让我们用python的文件处理来进行文件拷贝,想必很多小伙伴的思路是:使用打开2个 ...
- python标准库之shutil——可操作权限的文件操作库
转载自:https://www.jb51.net/article/145522.htm shutil模块提供了许多关于文件和文件集合的高级操作,特别提供了支持文件复制和删除的功能. 文件夹与文件操作 ...
随机推荐
- 《精通并发与Netty》学习笔记(14 - 解决TCP粘包拆包(二)Netty自定义协议解决粘包拆包)
一.Netty粘包和拆包解决方案 Netty提供了多个解码器,可以进行分包的操作,分别是: * LineBasedFrameDecoder (换行) LineBasedFrameDecoder是回 ...
- 【amad】cookiecutter -- 一个命令行工具,使用项目模版来构建项目
动机 简介 个人评分 动机 一般的框架都有脚手架工具,但是并不会让所有人满意. 简介 cookiecutter1是一个Python实现的命令行工具,可以通过项目模版来构建项目. 它的特性包括: 跨平台 ...
- CentOS 部署 MongoDB(新)
step1.进入到/opt/下执行 下载 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.6.5.tgz ste ...
- mongodb的安装部署-备份
1.安装部署 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.4.10.tgz tar -zxf mongodb-linux- ...
- 洛谷 题解 P2280 【[HNOI2003]激光炸弹】
一道很好的二维前缀和模板题. 什么是二维前缀和? 从这张图可以看出前缀和的求法: Map[i][j]=Map[i-1][j]+Map[i][j-1]-Map[i-1][j-1]+Map[i][j]; ...
- Java操作Excle(基于Poi)
有一次有个同事问我会不会有java操作Excle,回答当然是不会了!感觉被嘲讽了,于是开始寻找度娘,找到个小例子,结果越写越有意思,最后就成就了这个工具类. import java.io.Buffer ...
- Python 解leetcode:49. Group Anagrams
题目描述:给出一个由字符串组成的数组,把数组中字符串的组成字母相同的部分放在一个数组中,并把组合后的数组输出: 思路: 使用一个字典,键为数组中字符串排序后的部分,值为排序后相同的字符串组成的列表: ...
- 【Python基础】12_Python中的容器类型公共方法
1.Python中的内置函数 注:比较两个值,使用 <. >. == 2.切片 注:字典是一个无序集合,不能切片 3.运算符 字典中的in .not in 对字段操作时,只能判断字典的k ...
- varnish应用
Nginx+Varnish+基本业务 ngnix nginx.conf配置文件 user root; worker_processes ; error_log logs/error.log crit; ...
- 怎样删除一条Cookie
删除Cookie的唯一方法是: 将Expires设置为一个过去值, 一般会设置为 Thu, 01-Jan-1970 00:00:01 GMT 因为这是时间零点, 设这个总不会错. document.c ...