同时解压缩和Unrar

时间:2013-09-03 13:31:20

标签: python python-2.7

我有一个代码用于提取过程。首先,我为zip文件制作了它,但我发现我也有rar文件。所以,我安装了rarfile库并实现了提取过程。

但是,似乎代码引发了异常,因为扫描的第一个文件是.zip文件。这解释了,我想,为什么我有这个错误:

raise NotRarFile("Not a Rar archive: "+self.rarfile)
NotRarFile: Not a Rar archive: /Users/me/Downloads/_zips/test2/Break_The_Bans_-_Covers__B-sides.zip

提取代码如下:

for ArchivesFiles in chemin_zipfiles :    
        truncated_file = os.path.splitext(os.path.basename(ArchivesFiles))[0]
        if not os.path.exists(truncated_file):
            os.makedirs(truncated_file)
            rar_ref = rarfile.RarFile(ArchivesFiles,'r')
            zip_ref = zipfile.ZipFile(ArchivesFiles,'r')
            new_folder = os.path.realpath(truncated_file)
            rar_ref.extractall(new_folder)
            zip_ref.extractall(new_folder)

在调用此代码之前,我使用.zip和.rar扩展名检索所有文件:

chemin_zipfiles = [os.path.join(root, name)
             for root, dirs, files in os.walk(directory)
             for name in files
             if name.endswith((".zip", ".rar"))]

我怎么能在相同的过程和功能中解压缩和解压缩呢?我哪里错了? 非常感谢

1 个答案:

答案 0 :(得分:2)

为什么不能直接检查扩展程序?像这样:

for ArchivesFiles in chemin_zipfiles :    
    truncated_file, ext = os.path.splitext(os.path.basename(ArchivesFiles)) 
    if not os.path.exists(truncated_file):
        os.makedirs(truncated_file)
        if ext == 'rar':
            arch_ref = rarfile.RarFile(ArchivesFiles,'r')
        else:
            arch_ref = zipfile.ZipFile(ArchivesFiles,'r')
        new_folder = os.path.realpath(truncated_file)
        arch_ref.extractall(new_folder)

如果您获得truncated_file变量,请不要进行更改。

另一种可能会使事情变得更容易的可能性是:

funcs = {'.rar':rarfile.RarFile, '.zip':zipfile.ZipFile}

for ArchivesFiles in chemin_zipfiles :    
    truncated_file, ext = os.path.splitext(os.path.basename(ArchivesFiles)) 
    if not os.path.exists(truncated_file):
        os.makedirs(truncated_file)
        arch_ref = funcs[ext](ArchivesFiles,'r')
        new_folder = os.path.realpath(truncated_file)
        arch_ref.extractall(new_folder)