如何仅使用 Python 将 tar.gz 文件转换为 zip?

Gee*_*eet 4 python zip tar

有人有仅使用 Python 代码将 tar.gz 文件转换为 zip 的代码吗?我遇到了 tar.gz 的许多问题,如如何使用带有 gzip 压缩选项的 pandas read_csv 读取 tar.gz 文件?

san*_*ica 6

您必须使用tarfile模块和'r|gz'读取模式。然后使用zipfile进行写入。

import tarfile, zipfile
tarf = tarfile.open( name='mytar.tar.gz', mode='r|gz' )
zipf = zipfile.ZipFile( file='myzip.zip', mode='a', compression=zipfile.ZIP_DEFLATED )
for m in tarf:
    f = tarf.extractfile( m )
    fl = f.read()
    fn = m.name
    zipf.writestr( fn, fl )
tarf.close()
zipf.close()
Run Code Online (Sandbox Code Playgroud)

您可以用来is_tarfile()检查有效的 tar 文件。

也许你也可以使用shutil,但我认为它不能在内存上工作。

PS:根据我执行的简短测试,您可能会对m目录成员有问题。如果是这样,您可能必须使用is_dir(),或者甚至首先使用 获取每个 tar 文件成员的信息tarf.getmembers(),然后打开tar.gz文件以传输到zip,因为之后您无法执行此操作tarf.getmembers()(您无法向后查找)。

  • 似乎不适用于Python 3?我得到 `'NoneType' 对象没有属性 'read'` (3认同)
  • 这不适用于 Python 3.7。在命令“fl = f.read()”中给我“AttributeError: 'NoneType' object has no attribute 'read'``` 错误。Python 3.7有什么解决方案吗? (2认同)