Python解压缩文件并检查文件是否存在

时间:2014-02-18 02:48:34

标签: python zip zipfile

我正在开始一个涉及每天早上解压缩数据的工作流程。拉链看起来像这样:

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,我会收到一个错误,说该目录已经存在,但显然没有。

有什么想法吗?

1 个答案:

答案 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)