我的任务是解析txtfile并返回一个字典,其中包含文件中的姓氏数。 txtfile如下所示:
city: Aberdeen
state: Washington
Johnson, Danny
Williams, Steve
Miller, Austin
Jones, Davis
Miller, Thomas
Johnson, Michael
我知道如何读取文件,并将文件分配给列表或字符串,但是我不知道如何找到每个文件的计数并将它们放入字典中。你们其中一个人能指出我正确的方向吗?
答案 0 :(得分: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}
答案 1 :(得分:0)
为了找到每个姓氏的计数:
答案 2 :(得分: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}
答案 3 :(得分: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
。