2017-08-03 3 views
-3

私は、テキストファイルをキー値のペアワイズに変換したい。 私が何をしたいのか私のテキストファイルPython:辞書へのテキストファイル

21:54:26  From Rohan luthra : yes 
21:54:36  From Ankit : yup 
21:54:36  From Ankit : yup 
21:55:04  From Rajesh : shubh shubh bolo sir 

は、このような

{'Rohan luthra' : 'yes', 
'Ankit' : 'yup,} 

^ のようなキーと値のペアに変換することです私はどんなフィッティング解決策を見つけることができませんでした。 「:」の行で、私は

with open(x) as f: 
    lines = f.readlines() 
    with open(x, 'r') as f: 
     for line in f: 
      splitLine = line.split() 
      temp_dict[(splitLine[0])] = " ".join(splitLine[2:]) 
      # Dirty hack to remove timestamp 
      temp_array = temp_dict.values() 
      chat_dict = dict(s.split(':') for s in temp_array) 
      pp.pprint(temp_dict) 

をしました。しかし、それは2に遭遇した場合、このメソッドは失敗した何 。 それを返します:

Traceback (most recent call last): 
    File "filereader.py", line 37, in <module> 
    most_talkative() 
    File "filereader.py", line 32, in most_talkative 
    chat_dict = dict(s.split(':') for s in temp_array) 
ValueError: dictionary update sequence element #35 has length 3; 2 is required 
+1

こんにちは、ようこそ!私たちがあなたのためにいくつかのコードを書いてくれるように思えます。多くのユーザーは、苦労しているコーダーのコードを作成したいと考えていますが、通常、ポスターが既に問題を解決しようとしているときにのみ役立ちます。この努力を実証する良い方法は、これまでに書いたコード、サンプル入力(もしあれば)、予想される出力、実際に得られる出力(コンソール出力、トレースバックなど)を含めることです。あなたが提供する詳細があれば、受け取る可能性のある回答が増えます。 [FAQ]と[ask]を確認してください。 – MooingRawr

+1

適合する解決策がない場合は、1つを作成し、努力を示してから、つまった場合に質問してください。 –

+0

「失敗する」とはどういう意味ですか? –

答えて

0

以下は、指定されたファイル形式の任意の長さのバージョンから辞書を作成します。キーごとに1つの値しかないことがあるので、繰り返しキーは後の値で上書きされます。

x = 'path\\to\\file' 
temp_dict = dict() 
chat_dict = dict() 
with open(x, 'r') as f: 
    for line in f: 
     splitLine = line.split() 
     temp_dict[(splitLine[0])] = " ".join(splitLine[2:]) 
     # Dirty hack to remove timestamp 
     temp_array = temp_dict.values() 
     chat_dict.update(dict(s.split(':')[:2] for s in temp_array)) 
print(chat_dict) 
+0

私は繰り返しキーがあります! –

0
with open(x) as f: 
    lines = f.readlines() 
    with open(x, 'r') as y: 
     for line in y: 
      splitLine = line.split() 
      temp_dict[(splitLine[0])] = " ".join(splitLine[2:]) 
      # Dirty hack to remove timestamp 
      temp_array = temp_dict.values() 
      chat_dict = dict(s.split(':')[:2] for s in temp_array) 

これは動作するようです! @Alan Leuthard

ループによって与えられる 解決策は、実際のファイルがlen(行)を返す100+ライン+

である実際のないを与えている間だけ20行のために働きます。ファイル内の行数119.