Python文件管理实战:Shutil、遍历与ZIP压缩详解
本文详解Python中组织与管理文件的常用方法。通过Shutil模块实现文件的复制、移动与删除,利用os.walk()遍历目录结构,并借助zipfile模块进行ZIP文件的创建、读取及解压缩。涵盖具体API用法、参数说明及代码示例,帮助开发者高效处理文件自动化任务。
一、Shutil 模块
shutil模块(shell工具模块)提供了一系列函数,用于在Python程序中执行文件的复制、移动、重命名和删除操作。
1.1 复制文件和文件夹
- shutil.copy(source, destination):将位于source路径的文件复制到destination路径指定的文件夹中。若destination指定为文件名,则该文件将被复制并以新名称保存。
- shutil.copytree(source, destination):将source路径下的整个文件夹(包含所有子文件夹及文件)复制到destination路径指定的文件夹中。
import shutil
import os
current_path = os.getcwd()
# 拷贝test.txt 文件到temp1文件夹下
shutil.copy(current_path+"/test.txt",current_path+"/Python/temp1")
# 将temp1文件夹内容拷贝到temp2文件夹下,此时会创建temp2文件夹
shutil.copytree(current_path+"/Python/temp1",current_path+"/Python/temp2")
结果:

1.2 移动文件和文件夹
- shutil.move(source, destination):将source路径下的文件夹移动到destination路径,并返回新位置的绝对路径字符串。
注: 如果destination指向一个已存在的文件夹,source文件将被移动至该文件夹内,且保持原文件名不变; 如果destination指向一个已存在的文件,该文件将被source文件覆盖,请注意此行为; 如果destination指向一个不存在的文件夹,source的内容将被移动至destination,且source文件夹名将更改为destination。
import shutil
import os
current_path = os.getcwd()
# 将temp2文件夹内的文件拷贝到temp中,并将temp2改名为temp
shutil.move(current_path+"/Python/temp2",current_path+"/temp")
结果:

1.3 删除文件和文件夹
- os.unlink(path):删除位于path路径的文件。
- os.rmdir(path):删除位于path路径的空文件夹。注意,该文件夹内不能包含任何文件或子文件夹。
- shutil.rmtree(path):删除位于path路径的文件夹及其包含的所有文件和子文件夹。
import shutil
import os
current_path = os.getcwd()
shutil.rmtree(current_path+"/temp")
结果:

二、遍历文件
- os.walk(path):通过传入一个目录路径,递归遍历该目录及其子目录。
os.walk()在每次循环迭代中返回三个值:
1. 当前文件夹名称的字符串。
2. 当前文件夹中子文件夹名称的列表。
3. 当前文件夹中文件名称的列表。
import shutil
import os
current_path = os.getcwd()
for folder_name,sub_folders,file_names in os.walk(current_path):
print(folder_name+":")
# 加载当前文件路径下的所有子文件
for sub_folder in sub_folders:
print("\t"+folder_name+": "+sub_folder+"(dir)")
for file_name in file_names:
print("\t"+folder_name+": "+file_name)
输出(部分):
ubuntu@VM-0-2-ubuntu:~/python_file$ /usr/bin/python3 /home/ubuntu/python_file/Python/orignize_files.py /home/ubuntu/python_file: /home/ubuntu/python_file: .vscode(dir) /home/ubuntu/python_file: Python(dir) /home/ubuntu/python_file: test.cpp /home/ubuntu/python_file: test.txt /home/ubuntu/python_file: tempCodeRunnerFile.py /home/ubuntu/python_file/.vscode: /home/ubuntu/python_file/.vscode: db(dir) /home/ubuntu/python_file/.vscode: .git(dir) /home/ubuntu/python_file/.vscode: log(dir) /home/ubuntu/python_file/.vscode: settings.json /home/ubuntu/python_file/.vscode/db: /home/ubuntu/python_file/.vscode/db: cpptips.db-wal /home/ubuntu/python_file/.vscode/db: cpptips.db-shm /home/ubuntu/python_file/.vscode/db: cpptips.db /home/ubuntu/python_file/.vscode/.git: /home/ubuntu/python_file/.vscode/.git: 6eb7a60f73d1a1d9bdf44f2e86d7f4cc_test.cpp /home/ubuntu/python_file/.vscode/log: /home/ubuntu/python_file/.vscode/log: cpptips.server.2021-05-19.log /home/ubuntu/python_file/.vscode/log: cpptips.server.2021-05-16.log /home/ubuntu/python_file/.vscode/log: cpptips.server.2021-05-17.log /home/ubuntu/python_file/.vscode/log: cpptips.client.log /home/ubuntu/python_file/.vscode/log: cpptips.server.log /home/ubuntu/python_file/Python: /home/ubuntu/python_file/Python: temp1(dir) /home/ubuntu/python_file/Python: .git(dir) /home/ubuntu/python_file/Python: README.md /home/ubuntu/python_file/Python: hello_world.py /home/ubuntu/python_file/Python: orignize_files.py /home/ubuntu/python_file/Python: regex.py /home/ubuntu/python_file/Python: file_mange.py ......... ......... .........
三、压缩文件
利用zipfile模块中的函数,Python程序可以创建和打开ZIP文件。
3.1 创建和添加ZIP文件
想要创建ZIP文件,必须用ZipFile类创建一个ZipFile对象。ZipFile对象在概念上和File对象相似。
之后,以写模式打开这个对象。调用write()方法并传入一个路径,Python就会压缩该路径所指的文件,并将其添加到ZIP文件中。write方法的第一个参数是字符串,代表要添加的文件名;第二个参数是“压缩类型”参数,指定压缩算法。通常使用ZIP_DEFLATED即可。
import zipfile
import os
current_path = os.getcwd()
new_zip = zipfile.ZipFile("newZip","w")
new_zip.write("test.txt",compress_type=zipfile.ZIP_DEFLATED)
new_zip.write("test.cpp",compress_type=zipfile.ZIP_DEFLATED)
结果:

3.2 读取ZIP文件
当用ZipFile函数打开一个zip文件的时候,会返回一个ZipFile对象。之后调用这个对象的namelist()方法就可以获得zip里面的压缩文件列表。
同时这个对象还有一个getinfo()方法,通过传入一个压缩文件名,就可以获得这个文件的一些信息。
import zipfile
import os
current_path = os.getcwd()
new_zip = zipfile.ZipFile("newZip","r")
files = new_zip.namelist()
for file in files:
info = new_zip.getinfo(file)
print("filename: "+file)
print("\tsize: "+str(info.file_size))
print("\tcompress_size: "+str(info.compress_size))
输出:
ubuntu@VM-0-2-ubuntu:~/python_file$ /usr/bin/python3 /home/ubuntu/python_file/Python/orignize_files.py filename: test.txt size: 26 compress_size: 26 filename: test.cpp size: 30 compress_size: 28
3.3 解压缩ZIP文件
ZipFile对象的extractall方法从ZIP文件中解压缩所有的文件和文件夹,放到当前工作目录下:
import zipfile
import os
current_path = os.getcwd()
example_zip = zipfile.ZipFile("newZip","r")
# 解压
example_zip.extractall()
example_zip.close()
结果:

四、参考文献
AI Sweigart.Python编程快速上手——让繁琐工作自动化.人民邮电出版社.2016.07
到此这篇关于python基础学习之组织文件的文章就介绍到这了,更多相关python组织文件内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









