介绍

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:高层文件操作的更多相关文章

  1. python3之shutil高级文件操作

    1.shutil高级文件操作模块 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作.对单个文件的操作也可参见os模块. 2.shutil模块的拷 ...

  2. shutil 高级文件操作

    High-level file operations  高级的文件操作模块,官网:https://docs.python.org/2/library/shutil.html# os模块提供了对目录或者 ...

  3. python模块之shutil高级文件操作

    简介 shutil模块提供了大量的文件的高级操作.特别针对文件拷贝和删除,主要功能为目录和文件操作以及压缩操作.对单个文件的操作也可参见os模块. 注意即便是更高级别的文件复制函数(shutil.co ...

  4. Python档案袋( 命令行操作 及 Os与Shutil文件操作补充 )

    调用系统命令 import os #调用系统命令,输出只能输出到屏幕上,不能用变量接收 os.system("ipconfig") #调用系统命令,并把执行结果存到变量中 res= ...

  5. python os&shutil 文件操作

    python os&shutil 文件操作 # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于W ...

  6. 【Python】 高级文件操作 shutil

    shutil 很多时候,我想要对文件进行重命名,删除,创建等操作的时候的想法就是用subprocess开一个子进程来处理,但是实际上shutil可以更加方便地提供os的文件操作接口,从而可以一条语句搞 ...

  7. Python中文件操作2——shutil模块

    1 文件操作 文件有很多的操作,之前的文件操作中介绍了内建函数对文件的打开.读取以及写入,这三种操作是对文件基本的使用.文件还有复制.删除.移动.改变文件的属主属组等操作.下面主要看os模块和shut ...

  8. Python的高级文件操作(shutil模块)

    Python的高级文件操作(shutil模块) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 如果让我们用python的文件处理来进行文件拷贝,想必很多小伙伴的思路是:使用打开2个 ...

  9. python标准库之shutil——可操作权限的文件操作库

    转载自:https://www.jb51.net/article/145522.htm shutil模块提供了许多关于文件和文件集合的高级操作,特别提供了支持文件复制和删除的功能. 文件夹与文件操作 ...

随机推荐

  1. React Native npm第三方报错

    添加npm install第三方报错: 使用: yarn add 组件名称 注意: 这里不需要像npm的--save

  2. java工具类学习,系统中用户密码加密总结

    现在项目,用户注册登录部分很少有涉及到了,原因:现在热门开发框架都已经在底层帮我们做了一套用户注册,密码加密,登录认证,权限控制,缓存数据等基本功能. 这有利于项目的快速完成,只需要搬砖码畜们专注于业 ...

  3. Docker跨主机网络实践

    Docker使用中网络管理是最麻烦的,在项目初始化前期就需要进行合理的规划,如果在比较理想的单主机的网络通信是比较简单的,但如果涉及到跨主机的网络就需要使用docker自带的overlay netwo ...

  4. GRU网络

    1.GRU(Gated Recurrent Unit) 为了克服RNN无法远距离依赖而提出了LSTM,而GRU是LSTM的一个变体,GRU保持LSTM效果的同时,又使结构变得简单. 2.GRU结构 G ...

  5. Android之makefile

    在Android的源代码中,随处可见Makefile,那么Makefile到底是用来干嘛的呢?其实Makefile和Maven.ANT.Gradle一样,属于构建工具,当项目比较庞大的时候,就可以使用 ...

  6. js模板(template.js)实现页面动态渲染

    template.js是由纯JavaScript编写的第三方模板引擎.点击https://github.com/yanhaijing/template.js可进行下载. 在页头导入模板文件 <s ...

  7. [Agc029D]Grid game_贪心

    Grid game 题目链接:https://atcoder.jp/contests/agc029/tasks/agc029_d 数据范围:略. 题解: 方法肯定很简单,就是找一处障碍待在他上面就好. ...

  8. [LuoguP2124]奶牛美容_bfs_floyd_曼哈顿距离

    奶牛美容 题目链接:https://www.luogu.org/problem/P2124 数据范围:略. 题解: 发现数据范围只有$50$,显然可以直接$bfs$求出联通块,$floyd$求出相邻两 ...

  9. [OpenBenchMarking] AMD CPU 的性能简单对比

    来源: https://openbenchmarking.org/result/1710193-AL-EPYC7351P64 1. 2. 3. 4.

  10. SpreadJS:一款高度类似Excel的开发工具,功能涵盖Excel的 95% 以上

    Excel 作为一款深受用户喜爱的电子表格工具,借助其直观的界面.出色的计算性能.数据分析和图表,已经成为数据统计领域不可或缺的软件之一. 基于Excel对数据处理与分析的卓越表现,把Excel的功能 ...