如何在使用 Python 3 解压之前检查 tar 文件是否为空?

How to check if a tar file is not empty before unpacking it with Python 3?

我想解压缩一些 tar 档案,但我只想处理非空档案。我找到了一些 gzip 档案 How to check empty gzip file in Python 的代码,还有这个:

async def is_nonempty_tar_file(self, tarfile):
    with open(tarfile, "rb") as f:
        try:
            file_content = f.read(1)
            return len(file_content) > 1
        except Exception as exc:
            self.logger.error(
                f"Reading tarfile failed for {tarfile}", exc_info=True
            )

所有 tar 档案,无论是空的还是非空的,似乎都至少有这个字符 \x1f。所以即使是空的也都通过了测试

我还能如何检查?

您可以使用 tarfile 模块列出 tarfile 的内容:

https://docs.python.org/3/library/tarfile.html#command-line-options

您可能可以只使用 tarfile.open 并检查描述符是否包含任何内容。

import tarfile

x = tarfile.open("the_file.tar")
x.list()

好的,我找到了一种使用 tarfile 模块中的 getmembers() 方法的方法。我做了这个检查非空 tarfiles 的方法:

 def is_nonempty_tar_file(self, archive):
    with tarfile.open(archive, "r") as tar:
        try:
            file_content = tar.getmembers()
            return len(file_content) > 0
        except Exception as exc:
            print(f"Reading tarfile failed for {archive}")