使用不同的空格数解析名称和地址信息

时间:2010-01-19 21:23:12

标签: python parsing street-address

我有一个以逗号分隔的文本文件。每行的第5个字段包含名称和地址信息。该名称通过“¬”字符与街道信息分开。同一个角色也将城市分开。示例字段为:
“¬BOL-MICKEY M MOUSE-123 TOMORROW LANE-ORLANDO FL12345-6789¬¬¬EOL-”

我需要将名称分成几部分,将城市|州| zip分成几部分。但是,名称可能有也可能没有中间的首字母,因此:

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

如果没有中间的首字母,

将无效。此外,城市的名称可能有也可能没有空格,因此:

city,state,zipCode = m [4] .split()

如果这个城市是“圣安东尼奥”或“里约热内卢”,

将无效。

最重要的是,我如何解析该部分并不总是采用相同格式的字段?

2 个答案:

答案 0 :(得分:3)

在您的示例中,似乎您可以通过获取“第一个字段”,“最后字段”和“介于两者之间的所有内容”来解决问题:

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]

通常,您可以通过从开头和结尾获取“固定”字段来处理包含空格的单个字段,剩下的任何内容都是可以包含空格的字段。只要有两个字段包含空格在同一栏中,你无能为力。它含糊不清。

使用您拥有的数据格式,如果有姓名包含空格的人,例如Robert Van de Graff,您可能会遇到一些问题。如果您通过查找仅包含一个字母的单词(例如:Robert J. Van de Graaff)并使用这些单词来定义名字的开头和结尾的位置,则可以解决此问题。但总的来说,你可能会有问题。

此外还隐藏着一个国际化问题:不是每个人都先写下他们的“名字” - 有时他们会先写下他们的姓氏。

答案 1 :(得分:0)

基本上Anon建议,你可以像这样实现它:

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