我正在尝试复制一组XML标记中的文件中的部分
> <tag>I want to copy the data here</tag>`
我想在文件中提取多个文本部分,所以我试图遍历文件以找到每个部分。我只是想逐行进行此操作,直到我弄清楚如何解析不需要的文本行并创建以下代码:
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'哦!”那一刻,但谢谢你的帮助!
干杯
答案 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解析器。