Я залил этот пост, но ответов нет похоже, работает для моих нужд. Однако я новичок в Python, так что это тоже может быть проблемой.
Вот несколько строк из output.csv:
Адрес сторон дела
25 THOMAS ST., PORTAGE, IN
CHESTNUT ST. 67, MILLBROOK, NJ
1 EMPIRE DR ., ОСТИН, Техас, 11225
111 ВАШИНГТОН-АВ. # 404, VALPARAISO, AK
89 E. JERICHO TPKE., Scarssdale, AZ
ОРИГИНАЛЬНЫЙ ПОЧТОВЫЙ ИНДЕКС
import usaddress
import csv
with open('output.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
addr=row['Case Parties Address']
data = usaddress.tag(addr)
print(data)
(OrderedDict([('AddressNumber', u'4167'), ('StreetNamePreType', u'Highway'), ('StreetName', u'319'), ('StreetNamePostDirectional', u'E'), ('PlaceName', u'Conway'), ('StateName', u'SC'), ('ZipCode', u'29526-5446')]), 'Street Address'
Как и в предыдущем посте, мне нужно вывести проанализированные данные в csv. Насколько я могу судить, мне нужно сделать следующие шаги:
- Предоставьте заголовки в виде списка для справки. (Они перечислены здесь в разделе «Подробности».)
- Используя Usaadress.tag (), проанализируйте source_csv как «данные», НО сохраните их соответствующие «ключи».
- Сопоставьте ключ: data с header_reference
- Экспорт в output_csv с одной строкой заголовка.
Я использую модуль Python, usaaddress, для синтаксического анализа большого CSV (200 КБ +). Модуль выводит проанализированные данные с помощью OrderedDict. Вышеупомянутый пост работает только в том случае, если все поля сопоставляются с одними и теми же заголовками для всех записей. Однако одним из МНОГИХ преимуществ usaddress является то, что он анализирует данные, даже если нет полей для анализа. Так, например, «123 Fake St, Maine, PA» идеально соответствует заголовкам адреса, города и штата. Но «123 Jumping Block, Suite 600, Maine, PA» поместит «Suite 600» в столбец «город», так как он соответствует статически в зависимости от позиции. Если я анализирую последнее, usaddress предоставляет адрес, идентификатор занятости (например, "номер набора"), город, заголовки штата.
Когда я использую онлайн-анализатор синтаксического анализатора, предоставляется формат вывода, который мне нужен, но он может вместить только 500 строк за раз.
Похоже, что мой код не будет знать, что представляет собой каждая точка данных, пока не будет маршрутизирован через модуль; ситуация с курицей или яйцом. Как мне записать строки в файл CSV, если каждая строка может иметь разные подмножества столбцов?
Для справки, ошибка, которую я получаю при попытке ближайшего решения (предоставляемого isosceleswheel), - это valueerror: I / O (...), и они ссылаются на строки 107 и 90 библиотеки csv.py, обе из которых относятся к именам полей. .
with open('output.csv') as csvfile:
reader = csv.DictReader(csvfile)
with open('myoutputfile', 'w') as o: # this will be the new file you write to
for row in reader:
addr=row['Case Parties Address']
data = usaddress.tag(addr)
header = ','.join(data.keys()) + '\n' # this will make a string of the header separated by comma with a newline at the end
data_string = ','.join(data.values()) + '\n' # this will make a string of the values separated by comma with a newline at the end
o.write(header + data_string) # this will write the header and then the data on a new line with each field separated by commas