Разбор имени и адреса информации с разным количеством пробелов - PullRequest
0 голосов
/ 20 января 2010

У меня есть текстовый файл с разделителями-запятыми.5-е поле в каждой строке содержит информацию об имени и адресе.Название отделено от информации об улице символом «¬».Этот же символ также разделяет город | штат | почтовый индекс.Пример поля:
"¬BOL¬MICKEY M MOUSE¬123 ЗАВТРА LANE¬ORLANDO FL 12345-6789¬¬¬EOL¬"

Мне нужно разделить имя на части и город| состояние | молнии на части.Однако имя может иметь или не иметь начальную середину, поэтому:

m = l [4] .split ("¬")
firstName, mi, lastName = m [2] .split ()

не будет работать, если нет среднего начального значения.Кроме того, название города может содержать или не содержать пробелы, поэтому:

город, штат, zipCode = m [4] .split ()

не будет работать, если город 'Например, Сан-Антонио или Рио-де-Жанейро.

Итог, как мне разобрать разделы поля, где раздел не всегда имеет одинаковый формат?

Ответы [ 2 ]

3 голосов
/ 20 января 2010

В ваших примерах кажется, что в обоих случаях вы можете решить проблему, получив «первые поля», «последние поля» и «все между ними»:

m = line.split("¬")[2].split()
firstname = m[0]
surname = m[-1]
initials = m[1:-1] # Maybe just keep this as a list?

И

m = line.split("¬")[4].split()
city = ' '.join(m[:-2])
state = m[-2]
zipCode = m[-1]

В общем случае вы можете обрабатывать одно поле, содержащее пробелы, получая «фиксированные» поля как из начала, так и из конца, и все, что осталось, - это поле, которое может содержать пробелы. Как только у вас появятся два поля, содержащие пробелы в той же колонке ничего не поделаешь. Это определено неоднозначно.

С имеющимся у вас форматом данных у вас могут возникнуть некоторые проблемы, если есть люди с именами или фамилиями, содержащими пробелы, такие как Роберт Ван де Графф. Это может быть решено, если у вас есть инициал, ища слова, содержащие только одну букву, такие как: Роберт Дж. Ван де Грааф, и используя их, чтобы определить, где начинаются и заканчиваются имена и фамилии. Но в целом у вас могут быть проблемы.

Также здесь скрыта проблема интернационализации: не все пишут свое «имя» в первую очередь - иногда они сначала пишут свою фамилию.

0 голосов
/ 20 января 2010

В основном, что предлагает Anon, вы можете реализовать это так:

cityInfo = m[4].split()
city, state, zipCode = ' '.join(cityInfo[:-2]), cityInfo[-2], cityInfo[-1])
...