使用Python' tarfile',如何获得tar存档中最顶层的目录?

时间:2012-06-29 21:22:08

标签: python tar

我想将主题档案上传到django Web模块,并希望将档案中最顶层目录的名称作为主题名称。存档将始终是tar-gzip格式,并且在顶层始终只有一个文件夹(尽管其他文件可能与它平行存在),各种子目录包含模板,css,图像等等。最好的主题。

目前,根据MegaMark16中非常有用的代码,我的工具使用以下方法:

f = tarfile.open(fileobj=self.theme_file, mode='r:gz')
self.name = f.getnames()[0]

其中self.theme_file是上传文件的完整路径。只要tarball中的条目顺序恰好是正确的,这种方法就可以正常工作,但在很多情况下并非如此。我当然可以遍历整个存档并手动检查正确的“名称”特征,但我怀疑有更优雅和快速的方法。有什么建议吗?

2 个答案:

答案 0 :(得分:6)

您需要使用名为commonprefix的方法。

示例代码将起到以下作用:

archive = tarfile.open(filepath, mode='r')
print os.path.commonprefix(archive.getnames())

如果打印的值是“档案中最顶层的目录” - 或者您的主题名称。

编辑:在进一步阅读您的规范时,如果您的文件兄弟姐妹到“最顶层目录”,则此方法可能无法产生您想要的结果,因为公共前缀只是.;这只有在所有文件确实具有主题名称的公共前缀时才有效。

答案 1 :(得分:0)

所有子目录都有' /'所以你可以做这样的事情

self.name = [name for name in f.getnames() if '/' not in name][0]并使用其他技巧进行优化。