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



我遍历目录,想找到所有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

如 ZipFile.write 的文档中所述,filename参数必须相对于存档根目录。所以下面的行:

z.write(file)

应该是:

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

os/walk()生成的files是文件名列表。这些文件名只是字符串(没有printdir()方法(。

您希望在打开 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))

最新更新