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

gro*_*wlf 5 python tar

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

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

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

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

hex*_*rot 8

您将需要使用名为commonprefix的方法.

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

archive = tarfile.open(filepath, mode='r')
print os.path.commonprefix(archive.getnames())
Run Code Online (Sandbox Code Playgroud)

打印值将是"归档中最顶层的目录" - 或者您的主题名称.

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