这是我的代码,我尝试使用打印功能进行检查,并使用#标记在代码旁边找到的内容。
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)
我获取了所有数据,不知道为什么我只获取了最后的数据,我该如何解决
答案 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
看看是否可行。