本帖最后由 a2599639 于 2024-1-4 12:10 编辑
在工作中可能会遇到下面的场景:需要将很多同名的文件压缩到一个压缩包里面,几千个文件手动肯定不现实,
那就用代码实现把
[Python] 纯文本查看 复制代码
import os
from zipfile import ZipFile
def zip_files_with_same_name(folder_path, output_folder):
os.makedirs(output_folder, exist_ok=True)
# 遍历文件夹及其子文件夹
for root, _, files in os.walk(folder_path):
# 创建一个字典,以文件名(不包含后缀)为键,文件路径列表为值
file_dict = {}
for file in files:
file_name, file_ext = os.path.splitext(file)
file_key = file_name.lower() # 忽略文件名的大小写
file_path = os.path.join(root, file)
if file_key in file_dict:
file_dict[file_key].append(file_path)
else:
file_dict[file_key] = [file_path]
# 遍历字典,对每组同名文件进行压缩
for key, file_paths in file_dict.items():
if len(file_paths) > 1:
rel_path = os.path.relpath(file_paths[0], folder_path)
output_subfolder = os.path.join(output_folder, os.path.dirname(rel_path))
os.makedirs(output_subfolder, exist_ok=True)
zip_file_path = os.path.join(output_subfolder, f"{key}.zip")
with ZipFile(zip_file_path, 'w') as zipf:
for file_path in file_paths:
rel_file_path = os.path.relpath(file_path, folder_path)
zipf.write(file_path, rel_file_path)
if __name__ == "__main__":
current_folder = os.getcwd()
output_folder = os.path.join(current_folder, "output")
# 执行压缩
zip_files_with_same_name(current_folder, output_folder)
这个代码可以将目录下所有文件夹下的同名文件压缩在一起,并保留文件路径
还有两个分别是只压缩当前文件夹下的文件、压缩所有文件夹下的文件,不保留文件路径
批量压缩同名文件.7z
(1.06 KB, 下载次数: 45)
|