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

4

我要开始一个包含每天早上解压数据的工作流程。 压缩文件看起来像这样:

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,我会收到一个错误消息,说目录已经存在,尽管实际上不存在。
有任何想法吗?

os.path.join以逗号分隔的文件夹参数作为附注。无需使用+r'/' +等符号。 - AER
1个回答

7
您的代码中的主要问题是,当同一目录下存在多个文件时,会导致错误。例如,“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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接