Python中的shutil模块使用详解
本文大纲
os模块是Python标准库中一个重要的模块,里面提供了对目录和文件的一般常用操作。
而Python另外一个标准库——shutil库,它作为os模块的补充,提供了复制、移动、删除、压缩、解压等操作,这些 os 模块中一般是没有提供的。
但是需要注意的是:shutil 模块对压缩包的处理是调用 ZipFile 和 TarFile这两个模块来进行的。
知识串讲
本文所使用的素材,都是基于以下2个文件夹,其中一个文件夹为空。
1)模块导入
import shutil
2)复制文件
- 函数:shutil.copy(src,dst)
- 含义:复制文件;
- 参数:src表示源文件,dst表示目标文件夹;
- 注意:当移动到一个不存在的“目标文件夹”,系统会将这个不存在的“目标文件夹”识别为新的文件夹,而不会报错;
# 1.将a表的“data.txt”移动到b表 src = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a\data.txt" dst = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_b" shutil.copy(src,dst) ------------------------------------------------------------ # 2.将a表的“data.txt”移动到b表,并重新命名为“new_data.txt” src = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a\data.txt" dst = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_b\new_data.txt" shutil.copy(src,dst) ------------------------------------------------------------ # 3.将a表的“data.txt”移动到“不存在”的文件夹 src = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a\data.txt" dst = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_c" shutil.copy(src,dst) """ 注意:对于情况3,系统会默认将“test_shutil_c”识别为文件名,而不是按照我们认为的,移动到一个新的不存在的文件夹。 """
结果如下:
3)复制文件夹
- 函数:shutil.copytree(src,dst)
- 含义:复制文件夹;
- 参数:src表示源文件夹,dst表示目标文件夹;
- 注意:这里只能是移动到一个空文件夹,而不能是包含其他文件的非空文件夹,否则会报错PermissionError;
① 如果目标文件夹中存在其他文件,会报错;
# 将a文件夹移动到b文件夹,由于前面的操作,此时b文件夹中已经有其他文件 src = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a" dst = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_b" shutil.copytree(src,dst)
结果如下:
② 如果指定任意一个目标文件夹,则会自动创建;
# c文件夹原本是不存在的,我们使用了下方的代码,会自动创建该文件夹 src = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a" dst = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_c" shutil.copytree(src,dst)
结果如下:
4)移动文件或文件夹
- 函数:shutil.move(src,dst)
- 含义:移动文件/文件夹;
- 参数:src表示源文件/文件夹,dst表示目标文件夹;
- 注意:文件/文件夹一旦被移动了,原来位置的文件/文件夹就没了。目标文件夹不存在时,会报错;
# 将当前工作目录下的“a.xlsx”文件,移动到a文件夹下 dst = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a" shutil.move("a.xlsx",dst) ---------------------------------------------------------------- # 将a文件夹下的“a.xlsx”文件,移动到b文件夹中,并重新命名为“aa.xlsx” src = r"C:/Users/黄伟/Desktop/publish/os模块/test_shutil_a\a.xlsx" dst = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_b\aa.xlsx" shutil.move(src,dst)
结果如下:
注意:移动文件夹操作类似,我这里就不赘述了,自行下去学习。
5)删除文件夹(慎用)
- 函数:shutil.rmtree(src)
- 含义:删除文件夹;
- 参数:src表示源文件夹;
- 注意:区别这里和os模块中remove()、rmdir()的用法,remove()方法只能删除某个文件,mdir()只能删除某个空文件夹。但是shutil模块中的rmtree()可以递归彻底删除非空文件夹;
# 将c文件夹彻底删除 src = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_c" shutil.rmtree(src)
结果如下:
6)创建和解压压缩包
- zipobj.write():创建一个压缩包;
- zipobj.namelist():读取压缩包中的文件信息;
- zipobj.extract():将压缩包中的单个文件,解压出来;
- zipobj.extractall():将压缩包中所有文件,解压出来;
- shutil 模块对压缩包的处理是调用 ZipFile 和 TarFile这两个模块来进行的,因此需要导入这两个模块;
- 注意:这里所说的压缩包,指的是“.zip”格式的压缩包;
① 创建一个压缩包
import zipfile import os file_list = os.listdir(os.getcwd()) # 将上述所有文件,进行打包,使用“w” with zipfile.ZipFile(r"我创建的压缩包.zip", "w") as zipobj: for file in file_list: zipobj.write(file)
结果如下:
② 读取压缩包中的文件信息
import zipfile with zipfile.ZipFile("我创建的压缩包.zip", "r") as zipobj: print(zipobj.namelist())
结果如下:
③ 将压缩包中的单个文件,解压出来
- 注意:目标文件夹不存在,会自动创建;
import zipfile # 将压缩包中的“test.ipynb”文件,单独解压到a文件夹下 dst = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a" with zipfile.ZipFile("我创建的压缩包.zip", "r") as zipobj: zipobj.extract("test.ipynb",dst)
结果如下:
④ 将压缩包中所有文件,解压出来;
- 注意:目标文件夹不存在,会自动创建;
import zipfile # 将压缩包中的所有文件,解压到d文件夹下 dst = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_d" with zipfile.ZipFile("我创建的压缩包.zip", "r") as zipobj: zipobj.extractall(dst)
结果如下:
到此这篇关于Python中的shutil模块使用详解的文章就介绍到这了,更多相关Python的shutil模块内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Python在Matplotlib图中显示中文字体的操作方法
这篇文章主要介绍了Python在Matplotlib图中显示中文字体的方法,本篇主要针对在Ubuntu系统中,matplotlib显示不了中文的问题,尤其是在无法安装系统字体的情况下,解决Python绘图时中文显示的问题。需要的朋友可以参考下2019-07-07对Django 中request.get和request.post的区别详解
今天小编就为大家分享一篇对Django 中request.get和request.post的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-08-08
最新评论