2011-07-13 15 views
3

私はpygameを実行可能にしようとしています。私は次のセットアップファイルを使用します。ディレクトリからファイル名を読み込みます。

from distutils.core import setup 
import py2exe 

setup( 
    console = [ "game.py" ], 
    author = "me", 
    data_files = [ (directory, [ file_1, file_2... ]) ] 
) 

を私は簡単なゲームで正常に動作するために、これを得ているが、私はパッケージ化したいゲームは> 700個の画像ファイルを持っています。私の質問は、ディレクトリからすべてのファイル名を読み取るための簡単な方法があるので、それぞれ個別にリストする必要はありませんか?

順番に番号が付けられたファイルがいくつかありますが、ほとんどの場合、ルート名が異なります。したがって、適切な文字列を作成するループを作成することはオプションではありません。

おかげ

+0

ここで、 'data_files = [(ディレクトリ、[file_1、file_2 ...])' '、' ['は余分なようです。それを修正してください。 –

+0

が修正されました。この問題を抱える他の人のために – sabajt

+0

さんに感謝します。[link](http://www.py2exe.org/index.cgi/data_files)は、セットアップスクリプトがdata_filesで何を行うのかを理解するのにも役立ちました。 – sabajt

答えて

6
import os 

data_files = [(x[0], x[2]) for x in os.walk(root_dir)] 

http://docs.python.org/library/os.html#os.walk

これは私があなたにこれを与えた[(dirpath1, [file1, file2, ...]), (dirpath2, [file3, file4, ...]), ...]

形式でタプルとして(もちろん、root_dir自体でのものと一緒に)root_dir内に含まれるすべてのサブディレクトリのためにあなたのファイルを与えますなぜなら、非常に多くのファイルで、サブディレクトリのない単一のディレクトリにすべてを置くのではなく、それらを適切に整理しておくということです。


これまでのところ、長いリストのファイルでは、ジェネレータ式がおそらくより効率的になることがわかりました。これを行うには、非常に簡単な変更が必要です。 data_filesが反復処理された場所に、次に使用することができ

import os 
data_file_gen = ((x[0], x[2]) for x in os.walk(root_dir)) 

そしてdata_file_genすなわち、括弧で外側のブラケットを交換する(あなたは一度だけ発電機を使用していると仮定すると、発電機を複数回使用する場合、あなたが持っているでしょうそのような場合は、メモリが問題にならない限りリストメソッドを使用するほうが良いかもしれません)。

+0

魅力的な作品です。答えた人のおかげです。 – sabajt

+0

あなたは大歓迎です。 – JAB

4

この

data_files = [directory, ...] # whatever you want to put specifically. 
data_files += [file for file in os.listdir('images') if os.path.isfile(file)] # for adding your image files 
+0

も同様です。 – sabajt

+1

これが機能するには、os.path.isfileにリストされているディレクトリを、cwdではないと仮定して含める必要があります。 'dir = 'images'' 'data_files + = [os.list.dir(dir)内のファイルのファイル(os.path.isfile(dir + file)] ' –

4

osモジュールがパスを取り、リストとして内容を返しlistdirというメソッドを持って試してみてください。

+0

)も同様です。 – sabajt

1

globを使用して、ディレクトリ内のすべてのファイルを収集します。 を使用してください。すべてのファイルを収集するには、すべての.jpgファイルを収集するには* .jpgを使用します。これはpy2exe出力ディレクトリの "Images"というフォルダに画像を置きます。

... 
from glob import glob 
... 
data_files = [ 
     ("Stuff", glob(r'C:\projectfolder\Stuff\*.*')) 
     ,("dlls", glob(r'C:\projectfolder\dlls\*.dll'))     
     ,("Images", glob(r'C:\projectfolder\images\*.*')) 
     ] 
... 
setup(
name='ProjectName' 
,options = options 
,data_files=data_files 
,console=['projectname.py'] 
) 
関連する問題