簡體   English   中英

我是python的新手,無法使用此循環代碼

[英]I'm new to python and having trouble with this looping code

我正在嘗試在一組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'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM