我正在开始一个涉及每天早上解压缩数据的工作流程。拉链看起来像这样:
zip_download.zip
Set 1
2014
Feb
17th
Image_1.png
Image_2.png
Set 2
2014
Feb
14th
Image_1.png
Image_2.png
Example file path: zip_download.zip/set 1/2014/Feb/14th/Image_1.png
我需要的是Python每天解压缩这些文件并基本上在Windows文件夹中构建数据库。有时可能会有前几天的数据,并且该文件夹可能已经存在,因此我需要进行错误处理。
这是我到目前为止所做的:
import zipfile
import os
target_location = r'C:/new_filestructure'
file_download = r'C:/Users.Mike/Downloads/download1.zip'
with zipfile.ZipFile(target_zip) as zip_file:
for member in zip_file.namelist():
try:
os.makedirs(os.path.join(target_location + r'/' + os.path.dirname(member)))
except:
(OSSError, WindowsError)
print os.path.basename(member)
print os.path.dirname(member)
这将运行良好并打印我想要的东西(只是测试它是否通过所有文件)但它不会创建一个文件夹。如果我拿出try / except,我会收到一个错误,说该目录已经存在,但显然没有。
有什么想法吗?
答案 0 :(得分:4)
代码中的主要问题是当多个文件位于同一目录中时会导致错误。 例如,目录“Set 1/2014 / Feb / 17th”创建两次:一次用于Image_1.png,另一次用于Image_2.png。
你也有一个奇怪的事情
file_download
应该是
target_zip
我最终得到的代码是:
import zipfile
import os
target_location = r'new_filestructure'
target_zip = r'zip.zip'
with zipfile.ZipFile(target_zip) as zip_file:
for member in zip_file.namelist():
if os.path.exists(target_location + r'/' + member) or os.path.isfile(target_location + r'/' + member):
print 'Error: ', member, ' exists.'
else:
zip_file.extract(member, target_location)