Как разобрать txtfile и экспортировать в словарь? - PullRequest
0 голосов
/ 30 марта 2012

Моя задача - проанализировать txtfile и вернуть словарь с количеством фамилий в файле.Txtfile выглядит следующим образом:

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

Я знаю, как прочитать файл и назначить файл списку или строке, однако я понятия не имею, как найти счетчики для каждого иположить их в словарь.Может ли один из вас указать мне правильное направление?

Ответы [ 4 ]

1 голос
/ 30 марта 2012
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 голосов
/ 30 марта 2012

Это был бы мой подход. Нет необходимости использовать регулярные выражения. Также фильтрация пустых строк для дополнительной надежности.

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.

0 голосов
/ 30 марта 2012
    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 голосов
/ 30 марта 2012

Для того, чтобы найти количество каждой фамилии:

  • вам нужно создать словарь, пустой будет
  • проходить по строкам в файле
  • для каждой строки в файле определите, что вам нужно делать с данными, там есть заголовки.Возможно, будет достаточно проверить наличие определенного символа в строке.
  • для каждой строки, для которой вы решите, что это имя, вам нужно разделить или, возможно, разделить строку, чтобы извлечь фамилию.
  • затем, используя фамилию в качестве ключа к словарю, проверьте и установите или увеличьте целое число в качестве значения ключа.
  • после того, как вы перебрали данные файла, у вас должен быть словарь с ключом по фамилиии значения, являющиеся количеством появлений.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...