我有一个我不想提取的存档,但要检查它的每个内容,无论它是文件还是目录。
os.path.isdir 和 os.path.isfile 不起作用,因为我正在处理存档。存档可以是 tar、bz2、zip 或 tar.gz 中的任何一个(所以我不能使用它们的特定库)。另外,该代码应该适用于任何平台,如 linux 或 windows。谁能帮我怎么做?
原文由 Sam 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.3k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.6k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
2 回答971 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
您已经声明您需要支持“tar、bz2、zip 或 tar.gz”。 Python 的
tarfile
模块将自动处理 gz 和 bz2 压缩的 tar 文件,因此实际上您只需要支持两种类型的存档:tar 和 zip。 (bz2 本身不是存档格式,它只是压缩)。您可以使用
tarfile.is_tarfile()
确定给定文件是否为 tar 文件。这也适用于使用 gzip 或 bzip2 压缩的 tar 文件。在 tar 文件中,您可以使用 — 确定文件是目录还是使用TarInfo.isdir()
TarInfo.isfile()
文件。同样,您可以使用
zipfile.is_zipfile()
确定文件是否为 zip 文件。使用zipfile
无法区分目录和普通文件,但以/
结尾的文件是目录。所以,给定一个文件名,你可以这样做:
在具有此结构的 tar 文件上运行时:
输出是:
请注意
x/4
是“未知”的,因为它是一个符号链接。使用
zipfile
没有简单的方法来区分符号链接(或其他文件类型)与目录或普通文件。信息在ZipInfo.external_attr
属性中,但要将其取回很麻烦: