使用Python将输出打印到文本文件(.txt)

时间:2018-07-29 04:59:55

标签: python

我想将输出打印到文本文件。但是如果在终端中打印,结果会有所不同。我的代码:

...
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

为什么?如何将输出打印到文本文件,就像在终端中打印输出一样?

4 个答案:

答案 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)

  1. 您不需要在使用close语法打开的文件句柄上调用with。该文件的关闭已为您处理。
  2. 我只会在for循环之前打开文件一次(for循环应该在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')