2016-04-22 24 views
0

基本的には、テキストファイルから文字列を読み込み、orderedDictとして保存したいと思います。 私のファイルには次の内容が含まれています。Python txtファイルからorderedDictを読み込む方法

content.txt:

variable_one=OrderedDict([('xxx', [['xxx_a', 'xxx_b'],['xx_c', 'xx_d']]),('yyy', [['yyy_a', 'yyy_b'],['yy_c', 'yy_d']]))]) 

variable_two=OrderedDict([('xxx', [['xxx_a', 'xxx_b'],['xx_c', 'xx_d']]),('yyy', [['yyy_a', 'yyy_b'],['yy_c', 'yy_d']]))]) 

私としてPythonで値を取得する方法:それが動作することを

xxx 

    xxx_a -> xxx_b 

    xxx_c -> xxx_d 
+2

ファイルはどこから来ましたか?より良いフォーマットを使用できますか? – jonrsharpe

+0

普通のコードを実行しようとすると文法上のエラーが出る – Greg

+2

'xxx_c - > xxx_d'は元の文字列には出力されず、' yyy'は中括弧を持つ出力には出現しません同様に不一致。しかし、私があなたの場合、私は[execfile](https://docs.python.org/2/library/functions.html#execfile)を見て、コレクションからOrderedDictコレクションのようなコードを試します。 v = {'OrderedDict':OrderedDict}; execfile( '1.txt'、{}、v); print v'(私はあなたが '1.txt'という名前のファイルを持っていると仮定します)**注意** execfileを呼び出すことは、このファイルのソースを信用しないと危険です。例えば、コンピュータ上のすべてのファイルを削除することができます。 –

答えて

0
import re 
from ast import literal_eval 
from collections import OrderedDict 

# This string is slightly different from your sample which had an extra bracket 
line = "variable_one=OrderedDict([('xxx', [['xxx_a', 'xxx_b'],['xx_c', 'xx_d']]),('yyy', [['yyy_a', 'yyy_b'],['yy_c', 'yy_d']])])" 
match = re.match(r'(\w+)\s*=\s*OrderedDict\((.+)\)\s*$', line) 
variable, data = match.groups() 

# This allows safe evaluation: data can only be a basic data structure 
data = literal_eval(data) 

data = [(key, OrderedDict(val)) for key, val in data] 
data = OrderedDict(data) 

検証:

print variable 
import json 
print json.dumps(data, indent=4) 

は、出力:

variable_one 
{ 
    "xxx": { 
     "xxx_a": "xxx_b", 
     "xx_c": "xx_d" 
    }, 
    "yyy": { 
     "yyy_a": "yyy_b", 
     "yy_c": "yy_d" 
    } 
} 

すべてのことを言って、あなたの要求は非常に奇妙です。データのソースを制御できる場合は、オーダーをサポートする実際のシリアライズフォーマットを使用してください(JSONではそうではありません)。 Pythonコードを出力しない。

関連する問題