【问题标题】:Zipping files in subfolders with size limitation在有大小限制的子文件夹中压缩文件
【发布时间】:2020-07-29 01:53:32
【问题描述】:

压缩文件夹中的所有文件(包括子文件夹中的文件),改编自 here 的脚本工作正常:

import zipfile
import os, sys

def zipfolder(filename, target_dir):            
    zipobj = zipfile.ZipFile(filename, 'w', zipfile.ZIP_DEFLATED)
    rootlen = len(target_dir)
    for base, dirs, files in os.walk(target_dir):
        for file in files:
            fn = os.path.join(base, file)
            zipobj.write(fn, fn[rootlen:])

zipfolder('C:\\TEMP\\temp.zip', 'C:\\TEMP\\f_with_3_subs\\')
sys.exit()

现在我想将文件限制为小于 2 兆字节,我在 for 循环后添加了一行,但它不起作用:

for base, dirs, files in os.walk(target_dir):
    for file in files:
        if os.stat(base + file).st_size < 2048 * 1000:
            ......    

错误信息:

FileNotFoundError: [WinError 2] The system cannot find the file specified

文件名好像有点乱。

纠正它的正确方法是什么?谢谢。

【问题讨论】:

    标签: python loops file directory zip


    【解决方案1】:

    你需要统计 fn,而不是 base + file(它只是将 base 和 file 连接成一个字符串)

    for base, dirs, files in os.walk(target_dir):
        for file in files:
            fn = os.path.join(base, file)
            if os.stat(fn).st_size < 2048:
    

    【讨论】: