2010-10-18 35 views
0

我想在文件中的一套XML标签内的复制部分的麻烦我是新来的蟒蛇有这个循环的代码

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

我想在文件中提取多个文本部分,所以我试图循环遍历这个文件找到每一个文件,我只是想逐行地完成这个工作,直到我找到了t Ø解析不需要的文本行,并创建了下面的代码:

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) 

我遇到的问题是它只是拷贝整个文件,而不只是我想的章节。

我知道代码不是很漂亮,但我还在学习,它将成为一个“德哦!”时刻,但感谢您的帮助!

干杯

+1

你确实有''标记吗?我认为你对Python字符串中的转义字符感到困惑。这不是一个正斜杠。另外,当没有发现任何东西时,'str.find'返回'-1',否则返回针的位置。你似乎没有测试正确的条件。 – SilentGhost 2010-10-18 16:40:03

回答

1

有与您的代码的几个问题:

  • 如果输入的是真正的"<STARTTAG> ... </STARTTAG>"格式,捕捉线是不会削减它,你打算在抢至少<STARTTAG>实例。
  • 您正在使用文字字符串前缀(r"<//STARTTAG>"),但您使用了两个正斜杠。从你上面的例子看来,结束标签只有一个正斜杠。我不知道为什么你需要在这里使用字面字符串前缀。如果这是不正确的,这可能是为什么检查变量从未设置为0(因此,代码复制整个文件)。

编辑:其他海报人员对find()的返回值所做的说明也非常有效。使用in关键字可能是更好的选择。

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

希望这会有所帮助!

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: 

另外,正斜杠并不需要进行转义(即使是在原始字符串少!)。

0

找到该行中子字符串的返回索引。可能starttag是在行首(索引为零),所以如果不工作,它应该。

尝试:

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

甚至更​​好

if "<starttag>" in line: 

或使用一些Python XML解析器。