我使用tarfile提取文件。不幸的是,这个压缩文件来自linux服务器,并包含几个包含文件的非法Windows操作系统字符的文件(':')。
我使用以下内容:
extract = tarfile.open(file)
extract.extractall(path=new_path)
extract.close()
我收到以下错误: IOError:[Errno 22]无效模式(' wb')或文件名:..." file :: ext"
所以我尝试将错误传递给:
try:
extract = tarfile.open(file)
extract.extractall(path=new_path)
extract.close()
except IOError:
pass
这确实有效,但提取不会继续。它只是因此失败而停止。
当我使用WinRAR提取存档时,该文件会自动重命名为" file__ext"。
是否有对python的WinRAR扩展?或者也许是一种跳过错误并继续提取的方法?或者像WinRAR一样自动重命名文件。如果文件被跳过,我不介意。
我看到有几个帖子有这个错误,但是所有帖子都是用于压缩而不是提取。
答案 0 :(得分:2)
extract = tarfile.open(file)
for f in extract:
# add other unsavory characters in the brackets
f.name = re.sub(r'[:]', '_', f.name)
extract.extractall(path=new_path)
extract.close()
(更改未保存到原始文件b / c我们默认情况下以读取模式打开它。)
答案 1 :(得分:0)
如果主要目标是批处理这些作业,则只需从命令行调用winRAR:
导入子流程
subprocess.call([' winRAR.exe',' x',' file.rar',' PathToExtractTo'],shell = True)
我还没有测试过上面的代码,但希望它提供了一些想法。