2017-04-03 6 views
1

私はリストに変換する必要があるテキストファイルを持っています。私は、誰かが私がこれを変換する方法を知っている可能性ができます。このデータをデータ構造に変換する

l = [ 
#ID    Date    Title   
["s4k5jk", "8 December 1970", "crossing the atlantic on a tricycle"], 
["f983", "22 December 1970", "Royal Episode 13"]] 

のように見えるリストの形式で出力を必要とする

'ID=s4k5jk\nDate=8 December 1970\nTitle=crossing the atlantic on a tricycle\nID=f983\nDate=22 December 1970\nTitle=Royal Episode 13' 

:ここではデータ形式のテキストファイルですか?どうもありがとう!

+0

希望の結果は何ですか? – zondo

+0

@zondo私の望む結果は、リストL(上の出力を参照)を印刷することです、私はちょうど辞書ではないテキストファイル – Sophie

+2

から元のデータを追加しました。それはリストです。それはあなたが欲しいものですか? – zondo

答えて

2

各項目は"ID="で定義されているため、最初の文はsplit()です。その後

は、それぞれの文がresults呼ばlistにいくつかの文字列とappendingそれらを操作し、"\n"でちょうどsplittingの問題でした。

コード:

s = 'ID=s4k5jk\nDate=8 December 1970\nTitle=crossing the atlantic on a tricycle\nID=f983\nDate=22 December 1970\nTitle=Royal Episode 13' 

data = s.split("\nID=") 
results = [] 

for d in data: 
    res = d.split("\n") 

    _id = res[0].replace("ID=", "") 
    _date = res[1].replace("Date=", "") 
    _title = res[2].replace("Title=", "") 

    results.append([_id, _date, _title]) 

for r in results: 
    print(r) 

出力:

['s4k5jk', '8 December 1970', 'crossing the atlantic on a tricycle'] 
['f983', '22 December 1970', 'Royal Episode 13'] 
+0

data = s.split( "ID =")は、非常に最初のエントリも考慮に入れることができるため、より優れています。 しかし、このバージョンのソリューションでは、「for d in data [1:]」 – wave5459

1

また、正規表現のアプローチを試みることができる:

>>> print(s) 
ID=s4k5jk 
Date=8 December 1970 
Title=crossing the atlantic on a tricycle 
ID=f983 
Date=22 December 1970 
Title=Royal Episode 13 
>>> fields = re.findall(r'ID=([\s\S]+?)\sDate=([\s\S]+?)\sTitle=([\s\S]+?)$', s, re.MULTILINE) 
>>> fields 
[('s4k5jk', '8 December 1970', 'crossing the atlantic on a tricycle'), ('f983', '22 December 1970', 'Royal Episode 13')] 
>>> 

注意、キャプチャグループを使用すると、まったく同じ動作します1つはre.findallでご希望!