我是python的新手,并且遇到了这个循环代码的问题

时间:2010-10-18 16:36:10

标签: python string

我正在尝试复制一组XML标记中的文件中的部分

> <tag>I want to copy the data here</tag>`
  • 请注意我发现标签周围的数据不是有效的XML,所以我无法导入普通库,必须通过字符串比较找到它:(*

我想在文件中提取多个文本部分,所以我试图遍历文件以找到每个部分。我只是想逐行进行此操作,直到我弄清楚如何解析不需要的文本行并创建以下代码:

InputFile=open('xml_input_File.xml','r')
OutputFile=open('xml_output_file.xml', 'w')
check = 0

for line in InputFile.readlines():
      if line.find("<STARTTAG>"):
          check = 1
      elif line.find(r"<//STARTTAG>"):
          check = 0
      if check == 1:
          OutputFile.write(line)

我遇到的问题是它只是复制整个文件,而不仅仅是我想要的部分。

我知道代码不是很漂亮,但我还在学习,它会变成“d'哦!”那一刻,但谢谢你的帮助!

干杯

3 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

  • 如果输入的格式为"<STARTTAG> ... </STARTTAG>",则捕获行不会削减它,因为您将至少抓取<STARTTAG>个实例。
  • 您使用的是文字字符串前缀(r"<//STARTTAG>"),但您使用的是两个正斜杠。从上面的示例中看,结束标记只有一个正斜杠。我不知道为什么你需要在这里使用文字字符串前缀。如果这不正确,那可能就是为什么check变量永远不会设置为0(因此,代码会复制整个文件)。

编辑:其他海报关于find()的返回值的观点也是非常有效的。使用in关键字可能是更好的选择。

您需要手动(通过split())或通过一些正则表达式来分析输入(解析)。或者,您可以尝试将输入修改为兼容的XML格式,然后使用许多免费库中的一个来处理这类事情。

希望这有帮助!

答案 1 :(得分:0)

Help on method_descriptor:

find(...)
    S.find(sub[, start[, end]]) -> int

    Return the lowest index in S where substring sub is found,
    such that sub is contained within s[start:end].  Optional
    arguments start and end are interpreted as in slice notation.

    Return -1 on failure.

-1也是True值。

尝试:

if "<STARTTAG>" in line:

此外,正斜杠不需要转义(在原始字符串中更少!)。

答案 2 :(得分:0)

查找行中子字符串的返回索引。可能starttag位于行的开头(索引为零),所以如果不能正常工作。

尝试:

if line.find("<STARTTAG>") != -1:

甚至更好

if "<starttag>" in line:

或者为python使用一些XML解析器。