2012-03-29 8 views
0

私の仕事は、txtfileを解析し、ファイル内の姓のカウントを持つ辞書を返すことです。 txtfileは次のようになります。私は、ファイルを読み込み、リストまたは文字列にファイルを割り当てる方法を知っているtxtfileを解析して辞書にエクスポートするには?

city: Aberdeen 
state: Washington 
Johnson, Danny 
Williams, Steve 
Miller, Austin 
Jones, Davis 
Miller, Thomas 
Johnson, Michael 

、しかし私は、それぞれのカウントを発見し、それらを置くことについて移動する方法を見当もつかない辞書に入れる。あなたの誰かが私を正しい方向に向けることができますか?各姓のカウントを見つけるために

+0

この宿題はありますか?その場合は、HOMEWORKタグをタグに追加してください。 –

+0

あなたがリクエストしたとおりです。 – trainreq

答えて

1
import re 

with open('test.txt') as f: 
    text = f.read() 

reobj = re.compile("(.+),", re.MULTILINE) 
dic = {} 
for match in reobj.finditer(text): 
    surname = match.group() 
    if surname in dic: 
     dic[surname] += 1 
    else: 
     dic[surname] = 1 

結果は次のとおりです。

{'Williams,': 1, 'Jones,': 1, 'Miller,': 2, 'Johnson,': 2} 
+0

あなたは)( reobj = re.compile( "(。+)、"、re.MULTILINE) と 姓= match.group()、特にグループを説明できますか?私は正規表現を読んだが、使用されているパターンはまだ私に言及している。 – trainreq

+0

この正規表現 '(。+) 'は、コンマで終わるすべての文字列に一致します。これは、指定されたファイル形式から姓を解析する最も簡単な方法でした。正規表現を実行して、各マッチを繰り返し処理します。 'match.group()'は単に一致した文字列を返します。 –

+0

ありがとうMikey。あなたはあなたの国を素晴らしいサービスに仕上げました。 – trainreq

0

  • あなたは辞書を作成する必要があり、空には、ファイル内の行ごとにファイルに回線を介して
  • ループを行います決定データで何をする必要があるのか​​、ヘッダがあるように見えます。おそらく、文字列内の特定の文字の存在をテストするだけで十分です。
  • 名前が決まっている行ごとに、文字列を分割するか、文字列を分割して姓を抽出する必要があります。
  • 次に、姓を辞書のキーとして使用して、キーの値として整数をチェックして設定または増分します。
  • ファイルデータをループした後、姓で値を付けた辞書と、出現回数で値を設定する必要があります。
0
import re 
    file = open('data.txt','r') 
    lastnames={} 
    for line in file: 
     if re.search(':',line) ==None: 
      line.strip() 
      last = line.split(',')[0].strip() 
      first = line.split(',')[1].strip() 
      if lastnames.has_key(last): 
       lastnames[last]+= 1 
      else: 
       lastnames[last]= 1 
    print lastnames 

は、これは私のアプローチになり、私に次のよう

>>> {'Jones': 1, 'Miller': 2, 'Williams': 1, 'Johnson': 2} 
0

を与えます。正規表現を使用する必要はありません。また、余分な堅牢性のために空白行をフィルタリング。

from __future__ import with_statement 
from collections import defaultdict 

def nonblank_lines(f): 
    for l in f: 
     line = l.rstrip() 
     if line: 
      yield line 

with open('text.txt') as text: 
    lines = nonblank_lines(text) 
    name_lines = (l for l in lines if not ':' in l)  

    surnames = (line.split(',')[0].strip() for line in name_lines) 

    counter = defaultdict(int) 
    for surname in surnames: 
     counter[surname] += 1 

    print counter 

あなたはPythonのバージョンを使用している場合>2.7あなたがcollections.Counterの代わりdefaultdictに建て使用することができます。

関連する問題