0

我为我的音乐目录制作了一个自动提取器。我编写了我的代码来处理 zip 和 rar 文件。代码工作正常,但如果工作目录中有其他类型的文件,那么我会收到一条错误消息:

raise BadZipfile, "File is not a zip file"
BadZipfile: File is not a zip file

这意味着 mp3 文件或其他任何内容正在阻止或中断提取过程。这是我的代码:

def extraction():
    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):
            new_folder = os.makedirs(truncated_file)
            arch_ref = funcs[ext](ArchivesFiles,'r')
            new_folder = os.path.realpath(truncated_file)
            arch_ref.extractall(new_folder)

我怎么能避免这种情况?

编辑 :

我做了一些改变:

def extraction():
    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):
            new_folder = os.makedirs(truncated_file)
            arch_ref = funcs[ext](ArchivesFiles,'r')
            new_folder = os.path.realpath(truncated_file)
            try:
                arch_ref.extractall(new_folder)
            except BadZipfile:
                continue
            except NotRarFile:
                continue

但仍然收到错误:

raise NotRarFile("Not a Rar archive: "+self.rarfile)
NotRarFile: Not a Rar archive: /Volumes/me/albums/reggae/reggae_dub/._Dubalizer_SubExisteÌncia_freshpoulp.rar

非常感谢。

4

3 回答 3

2

我认为有两种方法。首先你可以捕捉到异常:

try:
    arch_ref.extractall(new_folder)
except BadZipfile:
    continue

或者您可以尝试通过过滤文件扩展名和/或检查文件头来防止加载非 zip 文件。

于 2013-09-06T08:21:15.663 回答
0

您错误地指定了异常。代替:

except BadZipfile: 
    continue
except NotRarfile:
    continue

你应该这样做:

except zipfile.BadZipfile:
    continue
except rarfile.NotRarFile:
    continue

或者,以紧凑的方式:

except (zipfile.BadZipfile, rarfile.NotRarFile):
    continue
于 2016-05-18T11:52:54.183 回答
0

旧帖子但是,

我相信您遇到的问题是您对ê的口音。

因为您正在尝试访问某个文件,所以它会因为文件不存在错误而返回,但是如果您要在代码的其他地方使用该字符,例如尝试打印它,您会收到 UnicodeDecode 错误。

更多信息在这里:https ://pythonhosted.org/kitchen/unicode-frustrations.html

于 2016-11-11T19:04:50.113 回答