我想将输出打印到文本文件。但是如果在终端中打印,结果会有所不同。我的代码:
...
words = keywords.split("makan","Rina")
sentences = text.split(".")
for itemIndex in range(len(sentences)):
for word in words:
if word in sentences[itemIndex]:
print('"' + sentences[itemIndex] + '."')
break
这样的输出:
"Semalam saya makan nasi padang."
" Saya makan bersama Rina."
" Rina pesan ayam goreng."
如果我将打印添加到文本文件:
words = ["makan","Rina"]
sentences = text.split(".")
for itemIndex in range(len(sentences)):
for word in words:
if word in sentences[itemIndex]:
with open("corpus.txt",'w+') as f:
f.write(sentences[itemIndex])
f.close()
输出只是:
Rina pesan ayam goreng
为什么?如何将输出打印到文本文件,就像在终端中打印输出一样?
答案 0 :(得分:1)
您将为循环的每次迭代重新打开文件,以便在写入文件时覆盖已存在的文件。您需要在所有循环之外打开文件,然后以附加模式打开,以a
表示。
完成后,您将仅获得文件中的最后一行。完成操作后,请记住使用f.close()
关闭文件。
答案 1 :(得分:0)
您必须通过将打开/关闭文件移到循环外部来重新排列代码行:
with open("corpus.txt",'w+') as f:
words = ["makan","Rina"]
sentences = text.split(".")
for itemIndex in range(len(sentences)):
for word in words:
if word in sentences[itemIndex]:
f.write(sentences[itemIndex])
此外,print
通常在输出之后添加换行符,如果希望将句子写在文件的不同行上,则可能希望在每个句子后添加f.write('\n')
。 / p>
答案 2 :(得分:-1)
由于您在循环中列出了with open
,并且您使用的是'w+'
模式,因此程序每次都会覆盖该文件,因此只能以最后一行结束写入文件。请改用'a'
进行尝试,或将with open
移出循环。
答案 3 :(得分:-1)
close
语法打开的文件句柄上调用with
。该文件的关闭已为您处理。with
语句内),而不是多次打开文件。每次打开文件以写新行时,都会覆盖文件。您的代码应为:
words = ["makan","Rina"]
sentences = text.split(".")
with open("corpus.txt",'w+') as f:
for itemIndex in range(len(sentences)):
for word in words:
if word in sentences[itemIndex]:
f.write(sentences[itemIndex] + '\n')