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