0

我需要一些关于代码的帮助:

#!/usr/bin/python

output = open('XML/epg.xml','w')


with open('SORT/epg_slo_xml.txt','r') as txt:


    for line in txt:

        var1 = 'Program'

        if 'Program' in line:

            if var1 in line !=True:

                var = line
                var_s = '<program>'
                var_stop = '</program>'
                var_uk = var_s+line+var_stop


                if 'Start' in line:
                    var2=line
                    var_s1='<start>'
                    var_stop1 ='</start>'
                    var_uk1 = var_s1+var2+var_stop1
                    var_out = var_uk+var_uk1


                    if 'Duration' in line:
                        var3=line
                        var_s2='<duration>'
                        var_stop2 ='</duration>'
                        var_uk2 =var_s2+var3+var_stop2
                        var_out2= var_uk+var_uk1+var_uk2


                        if 'Title' in line:
                            var4=line
                            var_s3='<title>'
                            var_stop3 ='</title>'
                            var_uk3 =var_s3+var4+var_stop3

                                                        var_out3 =var_uk+var_uk1+var_uk2+var_uk3






output.write('<item>'+var_out3+'</item>')

如何打破循环,以及何时写入输出所有 var_uk 语句?你能给我一些建议吗?我尝试了很多东西,但没有结果。

我的文件看起来像:

Program 10   
        Start   20130918 11:50:00 
        Duration   02:10:00 
              Title Obvestila   
    Program 5   
        Start   20130918 12:00:00 
        Duration   00:20:00 
              Title TV TRANSFRONTALIERA  TG R   
    Program 10   
        Start   20130918 11:50:00 
        Duration   02:10:00 
              Title Obvestila   
    Program 13   
    Program 13   
        Start   20130918 12:00:00 
        Duration   00:15:00 
              Title TV prodaja   
        Start   20130918 12:15:00 
        Duration   01:00:00 
              Title S hrano do vitkosti   
        Start   20130918 13:15:00 
        Duration   00:25:00 
              Title Najini začetki   
        Start   20130918 13:40:00 
        Duration   00:30:00 
              Title Oddamo v najem   
        Start   20130918 14:10:00 
        Duration   01:00:00 
              Title Colin in Justin prenavljata domove 

我知道为每个 if 语句逐行编写输出,但我怎样才能写出所有语句?

4

2 回答 2

2

我还没有完全理解你的问题,break 会停止循环或迭代,我看不到你在任何地方使用它。但无论如何,这里有一些关于您的代码的提示:

  1. 线if var1 in line !=True:永远不会检查,因为你在做之前的线if 'Program' in line:。var1 等于 'Pr​​ogram' 所以你之后写的所有东西都不会运行
  2. 如果我正确理解您的代码,则您正在尝试根据内容为每一行添加标签。但是,没有理由将它们相互绑定。在您当前的代码中(并忽略我提到的逻辑错误),即“持续时间”检查仅在“开始”也检查时进行。我猜这不是一个要求。解决这个很容易。将所有 if 条件放在相同的缩进级别上。

像这样:

`if 'Duration' in line:
     ...code...`

`if 'Title' in line:
     ...code...`

3. 你的代码很重复。基本上你所有的条件检查都做同样的事情,那么为什么不把它包装在一个函数中呢?

像这样:

def wrap_tag(line, tag):
    return '<%s>%s</%s>' % (tag, line, tag)

然后:

if 'Start' in line:
     wrap_tag(line, 'start')

4. 因为它是一个 XML 文件,所以最好使用 ElementTree 或 lxml 库。他们真的很好,而且很容易学习。

于 2013-09-22T10:22:53.023 回答
0

将你提供的代码放在一个函数中怎么样?然后,您可以随时使用该语句与列表中的变量return一起退出。var_uk

此外,如果您正在解析 XML 数据,那么我建议您查看标准 python 库,例如ElementTree

于 2013-09-22T10:14:54.300 回答