我有一个以逗号分隔的文本文件。每行的第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()
将无效。
最重要的是,我如何解析该部分并不总是采用相同格式的字段?
答案 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])