我有一个代码用于提取过程。首先,我为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"))]
我怎么能在相同的过程和功能中解压缩和解压缩呢?我哪里错了? 非常感谢
答案 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)