Python中如何实现等数量压缩文件的批量处理?
例子是,我这有一个文件夹,这个文件夹里面有几万个图片,都是有序列的。现在想每 1000 张图片压缩成一个压缩包。最后一次不足 1000 张同样压缩成一个包。这个该怎么实现呢?如果是你,你会采取什么方法呢?
Python中如何实现等数量压缩文件的批量处理?
获取文件名列表,然后用 tar 打包。其实 shell 脚本就能搞定
import zipfile
import os
from pathlib import Path
def batch_zip_equal_files(source_dir, target_dir, files_per_zip=10):
"""
将源目录中的文件按等数量批量压缩
Args:
source_dir: 源文件目录路径
target_dir: 压缩包存放目录路径
files_per_zip: 每个压缩包包含的文件数量
"""
# 创建目标目录
Path(target_dir).mkdir(parents=True, exist_ok=True)
# 获取所有文件(排除子目录)
all_files = [f for f in Path(source_dir).iterdir() if f.is_file()]
# 按指定数量分组
for i in range(0, len(all_files), files_per_zip):
batch_files = all_files[i:i + files_per_zip]
zip_filename = Path(target_dir) / f"batch_{i//files_per_zip + 1}.zip"
# 创建压缩包
with zipfile.ZipFile(zip_filename, 'w', zipfile.ZIP_DEFLATED) as zipf:
for file_path in batch_files:
zipf.write(file_path, file_path.name)
print(f"已创建: {zip_filename},包含 {len(batch_files)} 个文件")
# 使用示例
if __name__ == "__main__":
# 设置你的目录路径
source_directory = "./source_files" # 源文件目录
output_directory = "./compressed" # 输出目录
# 每10个文件压缩成一个包
batch_zip_equal_files(source_directory, output_directory, files_per_zip=10)
这个脚本的核心逻辑很简单:先获取目录下所有文件,然后按你指定的数量(比如10个一批)进行分组,最后用zipfile库把每批文件打包成一个独立的zip压缩包。
如果你需要处理子目录里的文件,把第17行的if f.is_file()去掉就行。文件名格式现在是batch_1.zip、batch_2.zip这样按顺序编号,你也可以改成时间戳或者其他命名方式。
一句话总结:用切片分组加zipfile循环写入就能搞定等量分批压缩。
<br>import os<br>tmp_li = []<br>for name in os.listdir(path):<br> abs_path = os.path.join(path, name)<br> tmp_li.append(abs_path)<br> if len(tmp_li) == 10000:<br> do_with(tmp_li)<br> tmp_li = []<br>if tmp_li:<br> do_with(tmp_li)<br>
大概这个样子
有序列的话,不就是切片然后批量压缩吗?要快的话用多进程。shell 或者其他语言实现都是一样的
几行 shell 就解决了:
a=ls *.jpg ; while [ -n “$a” ]; do zip echo -e "$a" | head -1.zip echo -e "$a" | head -1000 ; a=echo -e "$a" | sed -n '1001,$p' ; done
选择合适的工具做合适的事。非要 Python 的话,os.system("""…""") 最合适了 (逃…


