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

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 に答える