仅获取xml文件的最后结果

时间:2020-09-25 16:58:33

标签: python xml

这是我的代码,我尝试使用打印功能进行检查,并使用#标记在代码旁边找到的内容。

def file(entry):
    file_name = str(entry)
    if file_name.endswith('.xml'):

        tree = ET.parse(file_name)
        root = tree.getroot()
        for i in range(len(root)):
            in_text = str(root[i][5].text).lower()

print(in_text)#在这里我仍然获得所有数据

    elif file_name.endswith('.json'):
        with open(file_name) as f:
            j_text = json.load(f)
            in_text = (j_text['text']).lower()
            
            
        
    else:
        root_error = tk.Tk()
        root_error.title('Error !')
        canvas_error = tk.Canvas(root_error, height=10, width=100 )
        canvas_error.pack()
        label_error = tk.Label(root_error, text= 'file type dont support')
        label_error.pack()
        root_error.mainloop()


    remove_digits = str.maketrans('', '', digits)
    res = in_text.translate(remove_digits) 

print(res)#在这里,我只得到最后一个

    token_text = sent_tokenize(res)
        
    sent_string = ('\n'.join(token_text))
        
    removed_pun = str(sent_string).translate(str.maketrans('', '', string.punctuation))
        
    stop_words = set(stopwords.words('english'))
    tokens = word_tokenize(str(removed_pun))
    result = [i for i in tokens if not i in stop_words]
        
    porter = PorterStemmer()
    stemmed = [porter.stem(word) for word in result]
        
    lemmatizer = WordNetLemmatizer()
    final_text = ' '.join([lemmatizer.lemmatize(w) for w in stemmed])
        
        
    lower_label_out['text'] = final_text
        
  

但是当我只使用这样的代码

tree = ET.parse('books.xml')
root = tree.getroot()


for i in range(len(root)):
    print(root[i][5].text)

我获取了所有数据,不知道为什么我只获取了最后的数据,我该如何解决

2 个答案:

答案 0 :(得分:1)

如注释中所述,您的问题是您在每次迭代中都覆盖了label['text']值。使用新的缩进,您只需将问题从out_text变量转移到label['text']变量。如果要获取所有out_text的列表,建议您执行以下操作。

out_text = []
for i in range(len(root)):
    # in each iteration, append the new string to the list
    out_text.append(str(root[i][0].text)

label_out['text'] = out_text

在每次迭代中,将str(root[i][0].text)的值附加到列表中,最后将其分配给label_out['text']的值。 但是,我建议您研究for循环在python中的工作方式,因为您可以编写如下相同的语句:

out_text = []
for ro in root:
    out_text.append(str(ro[0]).text)

label_out['text'] = out_text

print()语句起作用的原因是您将其放入for循环中,因此每次代码传递到那里时,当前值就会显示在屏幕上。

答案 1 :(得分:0)

for活字中的最后一行是缩进的,因此它仅显示最后一个元素。

尝试将其更改为:

for i in range(len(root)):
        out_text = str(root[i][0].text)
        label_out['text'] = out_text #note the new indentation

看看是否可行。