私は2行のデータを解析したいという簡単な例を持っています。PyParsingの結果オブジェクトから値のリストを取り出す方法は?
In [1] from pyparsing import Word, nums, OneOrMore, Optional, Suppress, alphanums, LineEnd, LineStart
Float = Word(nums + '.' + '-')
Name = Word(alphanums)
Line = OneOrMore(Float)('data') + Suppress(Optional(';')) + Optional('%') + Optional(Name)('name')
Lines = OneOrMore(Line + LineEnd())
string = ''' 1 10 0 T20
1 76 0 T76
'''
result = Lines.parseString(string)
In [2] result
Out[2] (['1', '10', '0', 'T20', '\n', '1', '76', '0', 'T76', '\n'], {'data': [(['1', '10', '0'], {}), (['1', '76', '0'], {})], 'name': ['T20', 'T76']})
結果オブジェクト、すなわちdata
の値とname
キーはラインに基づいて注文した商品にリストされている、私が必要とするすべての値を含みます。結果オブジェクトから値を取得するにはどうすればよいですか?
データ属性へのアクセス両方の行に
In [3] result.data
Out[3] (['1', '76', '0'], {})
In [4] for i in result.data:
print i
1
76
0
を与えないasDict()
方法のみ第二の行を返す
In [5]: result.asDict()
Out[5]: {'data': ['1', '76', '0'], 'name': 'T76'}
asList()
方法は、単一のリスト内のすべての情報を返し、それが困難です事前にname
とdata
の長さがわからないときに列挙するには
In [6]: result.asList()
Out[6]: ['1', '10', '0', 'T20', '\n', '1', '76', '0', 'T76', '\n']
asXML()
には必要なものすべてが含まれていますが、XML形式であり、docstringは間もなく廃止されると言います。再び
In [7]: print result.asXML() # The documentation says this will be deprecated
<data>
<data>1</data>
<ITEM>10</ITEM>
<ITEM>0</ITEM>
<name>T20</name>
<ITEM>
</ITEM>
<data>1</data>
<ITEM>76</ITEM>
<ITEM>0</ITEM>
<name>T76</name>
<ITEM>
</ITEM>
</data>
dump()
部分的に関連する情報が含まれていますが、それは文字列を返し、もう1つは情報のために再び文字列を解析する必要があります。
In [8]: print result.dump()
['1', '10', '0', 'T20', '\n', '1', '76', '0', 'T76', '\n']
- data: ['1', '76', '0']
- name: 'T76'
どのようにしてこれらの値をPythonの方法で取得しますか?
うわー感謝をポール。私はあなたが質問された質問にすばらしい答えを与えるだけでなく、いつもそこのいくつかのちょっとした情報を覗き見しています(私は今までformat_mapについて知りませんでした):)もう一度お礼とパッケージの素晴らしい仕事! – kdheepak