我正在尝试解析以下XML数据:
这只是我将遇到的两种数据的一个例子。拥有所需地址信息的公司和没有所需信息的公司。
从数据中我需要收集3条信息:
1)公司名称
2)公司街道
3)公司邮政编码
我可以使用以下代码执行此操作:
#Creates list of Company names
CompanyList = []
for company in xmldata.findall('company'):
name = company.find('name').text
CompanyList.append(name)
#Creates list of Company zipcodes
ZipcodeList = []
for company in xmldata.findall('company'):
contact_data = company.find('contact-data')
address1 = contact_data.find('addresses')
for address2 in address1.findall('address'):
ZipcodeList.append(address2.find('zip').text)
#Creates list of Company streets
StreetList = []
for company in xmldata.findall('company'):
contact_data = company.find('contact-data')
address1 = contact_data.find('addresses')
for address2 in address1.findall('address'):
StreetList.append(address2.find('street').text)
但它并没有真正做到我想要的,我无法弄清楚如何做我想要的。我相信它会是某种类型的'if'陈述,但我不知道。
问题在于我所拥有的地方:
for address2 in address1.findall('address'):
ZipcodeList.append(address2.find('zip').text)
和
for address2 in address1.findall('address'):
StreetList.append(address2.find('street').text)
它只会在列表中添加实际上具有XML中列出的街道名称或邮政编码的地方,但是我还需要一个地标,这些公司也没有列出这些信息,以便我的列表匹配。
我希望这是有道理的。如果我需要添加更多信息,请与我们联系。
但是,基本上,我试图找到一种方法来说明,如果公司没有邮政编码/街道名称,则填写“无”,如果有,则输入邮政编码/街道名称。
感谢任何帮助/指导。
答案 0 :(得分:1)
好吧,我会做一件坏事并建议您使用条件(三元)运算符。
StreetList.append(address2.find('street').text if address2.find('street').text else 'None')
所以这句话说明返回 address2.find('street')。text 如果** address2.find('street')不为空,否则返回'None'。
此外,您可以创建一个新方法来执行相同的测试并在两个地方调用它,注意我的python是生锈的,但应该让你关闭:
def returnNoneIfEmpty(testText):
if testText:
return testText
else:
return 'None'
然后打电话给它:
StreetList.append(returnNoneIfEmpty(address2.find('street').text))