python:tarfile提取错误IOError:[Errno 22]无效模式(' wb')或文件名

时间:2015-05-17 12:50:07

标签: python tarfile

我使用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一样自动重命名文件。如果文件被跳过,我不介意。

我看到有几个帖子有这个错误,但是所有帖子都是用于压缩而不是提取。

2 个答案:

答案 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)

我还没有测试过上面的代码,但希望它提供了一些想法。