2016-05-08 17 views
-2

私はディレクトリ内のファイルをループし、ファイルのデータを含むファイルの名前を付けた変数を設定する必要があるプロジェクトを持っています。例えばディレクトリ内のファイルをループし、ファイルの後に名前を付けた変数を設定する方法は?

私は、ファイルdata_1.datdata_2.datでフォルダ/tmpを持っています。

data_1.dat: data_2.dat

E-123 

data_1.dat、値がE-123、およびdata_2.datです:スクリプトを実行すると

B-321 

、それは2つの変数を作ります。値はB-321です。

私はこれを試してみましたが、私は私が行方不明ですか分からない:あなたは、あなたが変数の名前は、実行時に決定することにしたい問題(に直面している

for filename in os.listdir(): 
    filename = open(filename, 'r').read() 
+1

どのようにあなたのプログラムの残りの部分を使用するどのような変数名を知っているのだろうか?さらに、 'data_1.dat'と' data_2.dat'は正当なPython変数名ではありません。 – martineau

答えて

1

のような構文を使用して、辞書の上に名前(file_data["my_file.txt"])、およびループによってfile_data辞書に各ファイルの内容を検索できるようになります実行時に新しい変数を作成することは、決して良い考えではありません。例えば、ループの後にどの変数名を書くべきかを知る方法はありますか?

代わりに、ファイル名をキーにした辞書を使用してください。

files = {} 
for filename in os.listdir(): 
    file_contents = open(filename, 'r').read() 
    files[filename] = file_contents 

次に、files.keys()でファイル名をループすることができます。

新しい変数を実際に作成する必要がある場合は、関数内にあるかどうかによってグローバル変数またはローカル変数を使用できます。

for filename in os.listdir(): 
    file_contents = open(filename, 'r').read() 
    globals()[filename] = file_contents 
+1

現在の作業ディレクトリに '__builtins__'という名前のファイルがないことをうまく願っています。 –

+0

2つの '>'ブロック引用符で何を引用していますか?他の人が書いているのであれば、[適切に引用する]必要があります(https://stackoverflow.com/help/referencing)。 –

+0

私はそれを使って答えの要点を強調しました。そこには何か良いことがありますか? –

1

例えば、入力文字列に基づいて)、あなたが本当に望むのはキーと値のマッピングデータ構造です。 Pythonでは、これを行う正しい方法は辞書を使うことです。

file_data = dict() 
for filename in os.listdir(): 
    file_data[filename] = open(filename, 'r').read() 

さて、あなたは

for filename, contents in file_data.items(): 
    print filename, len(contents) 
+0

ありがとう!正確には私が必要としたものではありませんが、とにかく動作します! – HackerGamerLV

関連する問題