6

我想将主题存档上传到 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 中条目的顺序恰好是正确的,这就可以正常工作,但在许多情况下并非如此。我当然可以遍历整个档案并手动检查正确的“名称”特征,但我怀疑有一种更优雅和快速的方法。有什么建议么?

4

2 回答 2

8

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

示例代码将具有以下效果:

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

打印的值将是“存档中的最顶层目录”——或者,您的主题名称。

编辑:但是,在进一步阅读您的规范后,如果您有与“最顶层目录”同级的文件,这种方法可能不会产生您想要的结果,因为公共前缀将是; 这仅在所有文件确实具有您的主题名称的公共前缀时才有效。.

于 2012-06-29T21:30:49.513 回答
0

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

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

于 2017-03-13T12:21:16.290 回答