1

我正在尝试解析以下 XML 数据:

http://pastebin.com/UcbQQSM2

这只是我将遇到的两种数据的示例。拥有所需地址信息的公司和没有所需信息的公司。

从数据中我需要收集 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)

但它并没有真正做我想做的事,我不知道如何做我想做的事。我相信这将是某种类型的“如果”陈述,但我不知道。

问题是我有:

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 中列出的街道名称或邮政编码的地方添加到列表中,但我需要为也没有列出该信息的公司添加一个地标,以便我的列表匹配。

我希望这是有道理的。让我知道是否需要添加更多信息。

但是,基本上,我试图找到一种方法来说明公司是否没有邮政编码/街道名称,如果没有,则输入邮政编码/街道名称。

任何帮助/指导表示赞赏。

4

1 回答 1

1

好吧,我要做一件坏事,并建议您使用条件(三元)运算符。

StreetList.append(address2.find('street').text if address2.find('street').text else 'None')

因此,如果 **address2.find('street') 不为空,则此语句表示 return address2.find('street').text否则返回 'None'。

此外,您可以创建一个新方法来执行相同的测试并在两个地方调用它,注意我的 python 生锈了,但应该让你接近:

def returnNoneIfEmpty(testText):
    if testText:
        return testText
    else:
        return 'None'

然后调用它:

StreetList.append(returnNoneIfEmpty(address2.find('street').text))
于 2013-01-24T16:56:57.453 回答