python:tarfile提取错误IOError:[Errno 22]无效模式(';wb';)或文件名
我正在使用tarfile提取一个文件。不幸的是,此压缩文件来自linux服务器,并且包含多个包含非法Windows OS字符的文件(“:”) 我正在使用以下命令:python:tarfile提取错误IOError:[Errno 22]无效模式(';wb';)或文件名,python,tarfile,Python,Tarfile,我正在使用tarfile提取一个文件。不幸的是,此压缩文件来自linux服务器,并且包含多个包含非法Windows OS字符的文件(“:”) 我正在使用以下命令: extract = tarfile.open(file) extract.extractall(path=new_path) extract.close() 我得到以下错误: IOError:[Errno 22]无效的模式('wb')或文件名:。。。“文件::ext” 因此,我尝试通过以下方式传递错误: try: extra
extract = tarfile.open(file)
extract.extractall(path=new_path)
extract.close()
我得到以下错误:
IOError:[Errno 22]无效的模式('wb')或文件名:。。。“文件::ext”
因此,我尝试通过以下方式传递错误:
try:
extract = tarfile.open(file)
extract.extractall(path=new_path)
extract.close()
except IOError:
pass
这确实有效,但是提取不会继续。它只是随着这次失败而停止
当我使用WinRAR提取归档文件时,该文件会自动重命名为“file_uuext”
python是否有WinRAR扩展?或者是一种跳过错误并继续提取的方法?或者像WinRAR那样自动重命名文件。我不介意是否跳过该文件
我看到几个帖子出现了这个错误,但是所有帖子都是用于压缩而不是提取的。如果主要目标是批处理这些作业,您可以从命令行调用winRAR: 导入子流程
subprocess.call(['winRAR.exe','x','file.rar','PathToExtractTo'],shell=True) 我还没有测试上面的代码,但希望它能提供一些想法
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默认情况下,我们将以读取模式打开它。)您的文件名是否包含冒号?压缩文件本身,否。文件中有一些文件,是。由于我无法确定的原因,您的答案不起作用。然而,它确实引导我找到了正确的解决方法,因此我将其标记为解决方案。我最终使用了字符串库中的maketrans()和f.name=f.name.translate(),而不是正则表达式。谢谢古怪的我在Python2和Python3中测试了它。不过,很高兴你找到了解决方案!