gpt4 book ai didi

python - 将 CHANGING OrderedDict 输出为 CSV

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:15 25 4
gpt4 key购买 nike

我倒了over this post ,但答案似乎无法满足我的需求。但是,我是 Python 的新手,所以这也可能是问题所在。

这是 output.csv 中的一些行:
个案当事人地址
25 THOMAS ST., PORTAGE, IN
67 CHESTNUT ST., 米尔布鲁克, NJ
1 EMPIRE DR., AUSTIN, TX, 11225
华盛顿大道 111 号。 #404,瓦尔帕莱索,AK
89 E. JERICHO TPKE., 斯卡斯代尔, 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 中。据我所知,我需要执行以下步骤:

  1. 以列表形式提供 header 以供引用。 ( They're listed here in 'Details' .)
  2. 使用 Usaadress.tag(),将 source_csv 解析为“数据”,但保留其对应的“ key ”。
  3. 将 key:data 映射到 header_reference
  4. 导出到具有一个标题行的 output_csv。

我正在使用 Python 模块,usaaddress , 解析一个大的 csv (200k+)。该模块使用 OrderedDict 输出解析后的数据。上述帖子仅在所有字段都映射到所有记录的相同标题时才有效。但是,usaddress 的众多好处之一是即使没有要解析的字段,它也会解析出数据。因此,例如,“123 Fake St, Maine, PA”完美映射到地址、城市、州标题。但是“123 Jumping Block, Suite 600, Maine, PA”会将“Suite 600”放在“城市”列中,因为它是根据位置静态匹配的。如果我自己解析后者,usaddress 会提供地址、占用标识符(例如“suite #”)、城市、州标题。

当我使用解析器的在线解析器时,我需要的输出格式已经提供,但它一次只能容纳 500 行。

似乎我的代码在通过模块路由之前不知道每个数据点是什么;先有鸡还是先有蛋的情况当每行可能具有不同的列子集时,如何将行写入 CSV 文件?

作为引用,当我尝试最接近的解决方案(由 isosceleswheel 提供)时得到的错误是 valueerror: I/O(...) 并且它们引用了 csv.py 库的第 107 行和第 90 行,两者属于字段名。

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

最佳答案

参见 this github issue寻求解决方案

因为我们知道 usaddress 中所有可能的标签,所以我们可以使用它们来定义输出中的字段。

我无法对答案发表评论 b/c 我没有足够的声誉,但我建议不要使用 usaddress 解析方法来完成此任务。 tag 方法将解析一个地址,然后在它们具有相同标签时连接连续的地址标记,如果存在具有相同标签的非连续标记,则会引发错误 - 最好在输出中捕获标记错误。

关于python - 将 CHANGING OrderedDict 输出为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31798061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com