[英]I'm new to python and having trouble with this looping code
我正在嘗試在一組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'oh!” 片刻,但感謝您的幫助!
干杯
您的代碼存在一些問題:
"<STARTTAG> ... </STARTTAG>"
的格式,則捕獲"<STARTTAG> ... </STARTTAG>"
不會削減它,因為您至少要抓住<STARTTAG>
實例。 r"<//STARTTAG>"
),但使用的是兩個正斜杠。 在上面的示例中,結束標記看起來只有一個正斜杠。 我不確定在這里為什么需要使用文字字符串前綴。 如果不正確,這可能就是為什么check變量永遠不會設置為0的原因(因此,代碼將復制整個文件)。 編輯:其他張貼者對find()的返回值也很有效。 使用in
關鍵字可能是更好的選擇。
您需要研究手動(通過split())或通過某些正則表達式來拆分輸入(解析)。 或者,您可以嘗試將輸入修飾為兼容的XML格式,然后使用許多免費提供的庫之一來處理這種事情。
希望這可以幫助!
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:
等等
同樣,也不需要轉義正斜杠(原始字符串中的斜杠甚至更少!)。
find返回行中子字符串的索引。 起始標簽可能在行的開頭(索引為零),因此,如果它不能正常工作。
嘗試:
if line.find("<STARTTAG>") != -1:
甚至更好
if "<starttag>" in line:
或為python使用一些XML解析器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.