Вывести вывод в текстовый файл (.txt), используя Python

1

Я хочу напечатать свой вывод в текстовом файле. Но результаты разные, если я печатаю в терминале. Мой код:

...
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 ответа

1
Лучший ответ

Вы снова открываете файл для каждой итерации цикла, поэтому, когда вы пишете на него, вы перезаписываете то, что уже есть. Вам нужно открыть файл за пределами всех циклов и открыть его в режиме добавления, обозначаемом a.

Когда вы закончите, вы получите только последнюю строку в файле. Не забудьте закрыть файл, используя f.close() когда закончите с ним.

  • 0
    рекомендовать a плохой совет. Проблема НЕ в том, что ему нужно добавлять на каждой итерации ... он должен просто открыть его один раз, написать, что он хочет, а затем закрыть его. Ваше предложение f.close является излишним. Когда вы открываете файл с использованием синтаксиса with , он автоматически закрывается при выходе интерпретатора из этого контекста.
  • 0
    Способ, которым настроена его структура цикла, позволяет использовать режим добавления. Если он хочет записать его в файл за один раз, ему нужно будет присоединиться к списку, объединить в символы \ n и затем записать в файл; или что-то подобное.
Показать ещё 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') после каждого предложения.

-1
  1. Вам не нужно звонить close на дескриптор файла, который вы открыли, используя with синтаксисом. Закрытие файла обрабатывается для вас.
  2. Я бы открыл файл только один раз для циклов (циклы 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')
-2

Поскольку вы публикуете with open внутренней частью цикла, и вы используете режим 'w+', ваша программа будет перезаписывать файл каждый раз, поэтому вы получите только последнюю строку, записанную в файл. Попробуйте вместо этого 'a' или переместитесь with open за пределами цикла.

  • 0
    Ему нужно вывести оператор with open из цикла ... строка close является избыточной.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню