我正在处理我的python脚本,每次使用此代码插入项目时都会截断频道项:
channels = {}
for elem in tv_elem.getchildren():
if elem.tag == 'channel':
channels[elem.attrib['id']] = self.load_channel(elem)
for channel_key in channels:
channel = channels[channel_key]
display_name = channel.get_display_name()
print display_name
以下是打印出来的内容:
20:58:02 T:6548 NOTICE: BBC One UK EN
20:58:02 T:6548 NOTICE: SVT 1 SE SE
20:58:02 T:6548 NOTICE: National Geographic Channel UK EN
20:58:02 T:6548 NOTICE: NRK1 NO NO
20:58:02 T:6548 NOTICE: Discovery Channel UK EN
20:58:02 T:6548 NOTICE: ARD DE DE
20:58:02 T:6548 NOTICE: DR1 DK DK
这是XML文件:
<?xml version="1.0" encoding="UTF-8" ?>
<tv generator-info-name="www.timefor.tv/xmltv">
<channel id="www.timefor.tv/tv/162">
<display-name lang="de">ARD DE DE</display-name>
</channel>
<channel id="www.timefor.tv/tv/1">
<display-name lang="dk">DR1 DK DK</display-name>
</channel>
<channel id="www.timefor.tv/tv/130">
<display-name lang="no">NRK1 NO NO</display-name>
</channel>
<channel id="www.timefor.tv/tv/135">
<display-name lang="se">SVT 1 SE SE</display-name>
</channel>
<channel id="www.timefor.tv/tv/10769">
<display-name lang="en">BBC One UK EN</display-name>
</channel>
<channel id="www.timefor.tv/tv/10214">
<display-name lang="en">National Geographic Channel UK EN</display-name>
</channel>
<channel id="www.timefor.tv/tv/10847">
<display-name lang="en">Discovery Channel UK EN</display-name>
</channel></tv>
我想以与XML文件相同的字母顺序打印它们,我打印的内容与XML文件的顺序不同。您知道如何使用我的代码以与XML文件相同的字母顺序打印项目吗?
答案 0 :(得分:3)
根据您的解释:
#Additional import
from collections import OrderedDict
channels = OrderedDict()
for elem in tv_elem.getchildren():
if elem.tag == 'channel':
channels[elem.attrib['id']] = self.load_channel(elem)
for channel_value in channels.items():
print channel_value.get_display_name()
注意:这将为您提供与从XML中读取它们相同的顺序,不按字母顺序排列
编辑:由于您使用的是Python 2.6,因此需要采用一种小解决方法:
channels = []
for elem in tv_elem.getchildren():
if elem.tag == 'channel':
channels.append( (elem.attrib['id'], self.load_channel(elem)) )
for channel_value in channels:
print channel_value[1].get_display_name()
答案 1 :(得分:1)
更新:mogambo在我输入时首先进入:)
用
替换第一行from collections import OrderedDict
channels = OrderedDict()
我只想补充一点:如果你永远不需要通过id单独检索它们而只想按照它们在XML中出现的顺序迭代它们,你也可以将你的通道对象附加到列表中。 / p>