6

テーマ アーカイブを django Web モジュールにアップロードし、アーカイブの最上位ディレクトリの名前を取得して、テーマの名前として使用したいと考えています。アーカイブは常に tar-gzip 形式であり、テンプレート、css、画像などを含むさまざまなサブディレクトリを含む、最上位レベルに常に 1 つのフォルダーしかありません (ただし、他のファイルが並行して存在する場合があります)。テーマ最高。

現在、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 に答える