Python 无法将 zip 文件识别为 zip 文件

Python doesn't recognize zip files as zip files

我遍历目录并想找到所有 zip 文件并将它们添加到 download_all.zip 我确定有 zip 文件,但 Python 无法将这些 zip 文件识别为 zip 文件。这是为什么?

我的代码:

os.chdir(boardpath)
# zf = zipfile.ZipFile('download_all.zip', mode='w')
z = zipfile.ZipFile('download_all.zip', 'w') #creating zip download_all.zip file

for path, dirs, files in os.walk(boardpath):
    for file in files:
        print file
        if file.endswith('.zip'): # find all zip files
                print ('adding', file)
                z.write(file) # error shows: doesn't file is a str object, not a zip file

z.close()
z = zipfile.ZipFile("download_all.zip")
z.printdir()

我试过了:

file.printdir()
# I got the following error: AttributeError: 'str' object has no attribute 'printdir'

zipfile.Zipfile.write(name),name其实代表完整的文件路径,而不仅仅是文件名。

import os #at the top

 if file.endswith('.zip'): # find all zip files  
    filepath = os.path.join(path, file)
    print ('adding', filepath) 
    z.write(filepath) # no error

os/walk() 产生的 files 是文件名列表。这些文件名只是 strings(没有 printdir() 方法)。

ZipFile.write's doc 中所述,filename 参数必须相对于存档根目录。所以下面一行:

z.write(file)

应该是:

z.write(os.path.relpath(os.path.join(path, file)))

您想在打开 zip 文件存档并为找到的每个文件写入时使用上下文管理,因此使用 with。此外,由于您正在遍历目录结构,因此需要完全限定每个文件的路径。

import os 
import Zipfile
with zipfile.ZipFile('download_all.zip', 'w') as zf:
    for path, dirs, files in os.walk('/some_path'):
        for file in files:
            if file.endswith('.zip'):
                zf.write(os.path.join(path, file))