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模块提供了许多关于文件和文件集合的高级操作,特别提供了支持文件复制和删除的功能. 文件夹与文件操作 ...
随机推荐
- 不要在viewWillDisappear:方法中移除通知
都知道viewWillAppear:方法是在控制器的view将要显示的时候调用的,而viewWillDisappear:方法是在控制器的view将要隐藏的时候调用. 这看上去没什么问题,键盘的显示和隐 ...
- 使用PostMan测试WebService接口
使用PostMan测试WebService接口 参考资料: 通过XML请求WebServer https://blog.csdn.net/qq_33933408/article/details/53 ...
- Linux中移动,复制,删除,打包排除某个目录或文件
移动,复制,删除排除某个文件或目录 cp !(file1|dir2) /data/ 复制文件到/data/,排除file1和dir2 mv !(file1|dir2) /data/ 移动文件到/dat ...
- Git速成学习第五课:分支管理策略
Git速成学习笔记整理于廖雪峰老师的官网网站:https://www.liaoxuefeng.com/ 通常合并分支时,如果可能用Fast forward模式,但是在这种模式下,删除分支后,会丢掉分支 ...
- Zookeeper 记录
本文主要是学习记录: 部分内容为 <从Paxos到Zookeeper> 部分内容为 zookpper 原理分析 https://www.cnblogs.com/leesf456/p/ ...
- NameNode 和 SecondaryNameNode
1. NN 和 2NN 工作机制 NameNode 会产生在磁盘中备份元数据的FsImage; 每当元数据有更新或者添加数据时,修改内存中的元数据并追加到Edits中; SecondaryNameNo ...
- sleep(0) 的作用
思考下面这两个问题: 假设现在是 2019-5-18 12:00:00.00,如果我调用一下 Thread.Sleep(1000) ,在 2019-5-18 12:00:01.00 的时候,这个线程会 ...
- confluence导出PDF格式文件不显示中文解决
由于confluence导出PDF格式文件需要应用字体文件,下载字体文件在confluence管理员界面安装即可. 我这里使用从simhei.ttf楷体,可以从windowns主机里下载(c:/win ...
- HanLP分词工具中的ViterbiSegment分词流程
本篇文章将重点讲解HanLP的ViterbiSegment分词器类,而不涉及感知机和条件随机场分词器,也不涉及基于字的分词器.因为这些分词器都不是我们在实践中常用的,而且ViterbiSegment也 ...
- HanLP-命名实体识别总结
人名识别 在HanLP中,基于角色标注识别了中国人名.首先系统利用隐马尔可夫模型标注每个词语的角色,之后利用最大模式匹配法对角色序列进行匹配,匹配上模式的即为人名.理论指导文章为:<基于角色标注 ...