使用python压缩给定的文件夹,只需要压缩给出的最后一个文件夹
时间: 2024-05-12 09:21:06 浏览: 142
可以使用Python内置的zipfile模块来实现压缩指定文件夹。
以下是一个例子,假设要压缩的文件夹名为“Folder”,并且只需要压缩其中的最后一个子文件夹“SubFolder”:
```python
import zipfile
import os
def zip_folder(folder_path, zip_path):
"""
压缩指定文件夹中的最后一个子文件夹
:param folder_path: 要压缩的文件夹路径
:param zip_path: 压缩后的zip文件路径
:return: 无返回值
"""
# 获取最后一个子文件夹的名字
subfolder_name = os.path.basename(os.path.normpath(folder_path))
subfolders = [f.path for f in os.scandir(folder_path) if f.is_dir()]
if subfolders:
subfolder_name = os.path.basename(os.path.normpath(subfolders[-1]))
# 创建ZipFile对象
with zipfile.ZipFile(zip_path, 'w', zipfile.ZIP_DEFLATED) as zipf:
# 遍历最后一个子文件夹中的所有文件并压缩
for root, dirs, files in os.walk(os.path.join(folder_path, subfolder_name)):
for file in files:
file_path = os.path.join(root, file)
arcname = os.path.relpath(file_path, os.path.join(folder_path, subfolder_name))
zipf.write(file_path, arcname=arcname)
print(f'{subfolder_name} compressed to {zip_path}')
# 测试
folder_path = 'Folder'
zip_path = 'Folder.zip'
zip_folder(folder_path, zip_path)
```
解释一下代码:
1. 获取最后一个子文件夹的名字:使用`os.scandir()`函数列出指定文件夹中的所有子文件夹,并根据它们的创建时间排序,然后取出最后一个文件夹的名字。
2. 创建ZipFile对象:使用`zipfile.ZipFile()`函数创建一个ZipFile对象,指定要创建的zip文件路径、模式和压缩方式。
3. 遍历最后一个子文件夹中的所有文件并压缩:使用`os.walk()`函数遍历最后一个子文件夹中的所有文件,然后使用`zipf.write()`函数将每个文件添加到压缩文件中。其中,`arcname`参数表示添加到压缩文件中的文件名,使用`os.path.relpath()`函数计算相对路径。
注意:
1. 如果指定的文件夹中没有子文件夹,则会将整个文件夹的内容压缩到zip文件中。
2. 如果指定的文件夹中有多个子文件夹,则只会压缩最后一个子文件夹。
3. 如果压缩文件路径已存在,则会覆盖原有文件。
阅读全文