Поиск кода города в txt-файле на Python - PullRequest
0 голосов
/ 25 июня 2011

У меня есть текстовый файл, который выглядит следующим образом:

Thomas Edgarson, Berliner Str 4, 13359 Berlin
Madeleine Jones, Müller Str 5, 15992 Karlsruhe
etc...

Это всегда два слова, после которых следует запятая, затем два слова и число, запятая, код города и город.Нет никаких исключений.

Я использовал

f=open("C:\\Users\\xxxxxx\\Desktop\\useradresses.txt", "r")
text=f.readlines()
f.close()

Так что теперь у меня есть список всех столбцов.Как я могу теперь искать коды города в этих строках.Мне нужно создать словарь, похожий на этот

{'13359':[('Neuss','Wolfgang'),('Juhnke','Harald')]}

Поверьте, я искал, но не смог найти полезную информацию.Для меня сама идея поиска чего-то вроде произвольного кода области в строке является новой, и я до сих пор не сталкивался с этим.

Я был бы рад, если бы вы могли дать мне несколько советов относительногде я должен искать учебники или дать мне представление, с чего начать.

Ответы [ 4 ]

1 голос
/ 25 июня 2011
dic = {}
with open('filename') as file:
    for name, addr, zcode in (i.split(',') for i in file if i.rstrip()):
        dic.setdefault(zcode.split()[0], []).append(name.split())

Дальнейшее объяснение, как спросил Шёрд:

Использование выражения генератора для разбиения каждой строки на 3 переменные: name, addr и zcode. Затем я разбил zcode на нужное число и использовал его в качестве ключа словаря.

Поскольку у dict еще может не быть ключа, я использую метод setdefault, который устанавливает ключ с пустым списком перед добавлением разделенного имени.

1 голос
/ 25 июня 2011

Цикл через файл, чтение строк и разделение запятой. Затем обработайте каждую часть, разделив пространство. Затем добавьте значения в словарь .

1 голос
/ 25 июня 2011
d={}

for line in open('useradresses.txt','r'):
    if line.strip()=='':
        continue
    (name,strasse,plzort) = line.split(',')
    nachname,vorname=name.split()
    plz,ort=plzort.split()
    if plz in d:
        d[plz].append((nachname,vorname))
    else:
        d[plz]=[(nachname,vorname),]
print d
0 голосов
/ 25 июня 2011

В Python есть много библиотек, занимающихся манипулированием строками, что и есть.Вам понадобится библиотека re и библиотека shlex .Я бы предложил следующий код:

with open("C:\\Users\\xxxxxx\\Desktop\\useradresses.txt", "r") as f:
    for line in f.readlines():
        split = shlex.split(line)
        mydict[split[6]] = [(split[0], split[1])]

Это не будет идеально, оно перезапишет идентичные почтовые индексы и потеряет некоторые значения.Это должно указать вам в правильном направлении, хотя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...