2016-05-27 10 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()以字符串形式返回文件中的所有數據。 您可以使用imp模塊分配變量。這種處理.txt文件作爲一個Python模塊:

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

然後你可以使用.操作獲取變量:

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

如果可以重命名文件,您可以更改擴展的.py和簡單地導入該文件作爲一個模塊:

import dataFile 

輸出:

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

請注意,這意味着您必須從文件中註釋掉任何非python語法。

+0

很好。它的工作原理,但爲什麼我用'set([])'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'文件,因爲我從網站上在線獲取這些數據。 –