2017-01-19 7 views
-2

私の入力ファイルの最初の行は次のようになります。私はPythonで、このようなキーと値のペアとして保存したい入力ファイルの最初の行を分割し、それらをPythonで辞書として保存するにはどうすればよいですか?

<doc id="12" url="http://en.wikipedia.org/wiki?curid=12" title="Anarchism"> 

:ここ

{doc_id: 12, url: http://en.wikipedia.org/wiki?curid=12, title: Anarchism} 

が私のコードです:

infile=open('wiki_00').readline().rstrip() 
infile.split()[1:] 

の出力は次のようになります。

['id="12"', 
'url="http://en.wikipedia.org/wiki?curid=12"', 
'title="Anarchism">'] 
ブラケットを剥ぎ取るために line[1:]をしないでください

しかし、私は「」をしたいと思い、<>は削除され、idがint型

+0

なぜ、タグ名は「id」にのみ付けられ、他の属性はありませんか? – TigerhawkT3

+0

'id'属性の前に常にタグ名を付けたいのですか? – pushkin

+0

@ pushkin okは必要ありません。それはこのidのように見ることができます:12 – Technologic27

答えて

0

として保存します。 stripメソッドを使用します。line.strip(' <>')は、空白をすべて削除し、行末から<>文字を削除します。

このようなものは、私が望むと思うことをするでしょう。エラー処理を追加することができます。

def turn_line_into_dict(line): 
    # remove the brackets and tag name 
    line = line.strip(' <>') 
    first_space_idx = line.find(' ') 
    line_without_tag = line[first_space_idx+1:] 

    attr_list = line_without_tag.split(' ') 

    d = {} 
    for attr_str in attr_list : 
     key,value = attr_str.split('=', 1) # only search for first occurrence, so an '=' in the url doesn't screw this up 
     d[key] = value.strip('"\'') # remove quotes and let the dict figure out the type 

    return d 
+0

'line.strip( '<>')'行末から '<', and '>'文字を削除します。すべての空白を削除するわけではなく、他の文字の間にある場合はその文字を削除しません。 – TigerhawkT3

+0

@ TigerhawkT3詳細については心配しないことにしました。私は一般的なアイデアを提示した。 OPはそれを改善することができます。しかし、どうして私は '>'と '<'を心配する必要がありますか?第二に、私がすべてのスペースを削除しないと想像できる唯一の問題は、タグ名がスペースで始まる可能性があるので、 'line_without_tag'が間違っている可能性があるということです。 – pushkin

+0

これは、行の内容を心配することではなく、誤った2つの事実を提示したことです。 – TigerhawkT3

関連する問題