2016-05-27 7 views
0

テキストファイルから辞書の要素を取得し、私はこのPythonコードビルドする方法:私のpythonを使用して、テキストファイルから辞書の要素を取得する必要があります

# -*- coding: utf-8 -*- 

user_input = raw_input('Write group name: ') 
data_file = open('data.txt', 'r') 
d = data_file.read() 
print d[user_input] 

data.txtをファイル:

group1 = { 
    'jhon', 
    'sam', 
    'mees' 
} 

group2 = { 
    '212332' 
} 

group3 = { 
    'USA', 
    'UK' 
} 

しかし、私をこのエラーが表示される:

Traceback (most recent call last): 
    File "test.py3", line 7, in <module> 
    print d[user_input] 
TypeError: string indices must be integers, not str 

data.textファイルから辞書要素を取得する方法はありますか?

+0

ファイル内のデータは、あなたの質問ごとに実際にセットしていない辞書である、あなたはそれを確認してデータのサンプルをコピーすることができますipythonで –

答えて

1

d = data_file.read()は、ファイル内のすべてのデータを文字列として返します。 変数を割り当てる方法の1つは、impモジュールを使用することです。

import imp 
with open('data.txt', 'r') as f: 
    file = imp.load_source('file', '', f) 

が次にあなたが.演算子使用して変数を取得することができます:の.pyし、あなたのファイルの名前を変更することができた場合は、拡張子を変更することができます

>>> file.group1 
{'sam', 'jhon', 'mees'} 
>>> file.group2 
{'212332'} 
>>> file.group3 
{'USA', 'UK'} 

をし、これはPythonのモジュールとして.txtファイルを扱います

import dataFile 

出力:

単にモジュールとしてファイルをインポートします
>>> dataFile.group1 
{'jhon', 'sam', 'mees'} 
>>> dataFile.group2 
{'212332'} 
>>> dataFile.group3 
{'USA', 'UK'} 

これは、ファイルから非Python構文をコメントアウトする必要があることに注意してください。

+0

素晴らしい。それは動作しますが、なぜ 'set([])'がセットされた出力が得られますか? –

+1

@icoderデータは実際にはデータです –

+0

'print dataFile.group2'は' set(['212332']) ' –

-1

data.txtを

{ 
    "group1": [ 
     " jhon", 
     "sam", 
     "mees" 
    ], 
    "group2": [ 
     "212332" 
    ], 
    "group3": [ 
     "USA", 
     "UK" 
    ] 
} 

コード:

import json 
data_file = open('data.txt', 'r') 
d = json.loads(data_file.read().strip()) 
print d["group1"] 
+0

ありがとうございました。問題は私が 'data.txt'ファイルを変更することができないことです。なぜなら私はこのデータをウェブサイトからオンラインで取得するからです。 –

関連する問題