Я хочу напечатать свой вывод в текстовом файле. Но результаты разные, если я печатаю в терминале. Мой код:
...
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
Зачем? Как печатать выходы в текстовый файл так же, как я распечатываю выходы в терминале?
Вы снова открываете файл для каждой итерации цикла, поэтому, когда вы пишете на него, вы перезаписываете то, что уже есть. Вам нужно открыть файл за пределами всех циклов и открыть его в режиме добавления, обозначаемом a
.
Когда вы закончите, вы получите только последнюю строку в файле. Не забудьте закрыть файл, используя f.close()
когда закончите с ним.
Вы должны переупорядочить строки своего кода, перемещая открытие/закрытие файла за пределами цикла:
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')
после каждого предложения.
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')
Поскольку вы публикуете with open
внутренней частью цикла, и вы используете режим 'w+'
, ваша программа будет перезаписывать файл каждый раз, поэтому вы получите только последнюю строку, записанную в файл. Попробуйте вместо этого 'a'
или переместитесь with open
за пределами цикла.
with open
из цикла ... строка close
является избыточной.
a
плохой совет. Проблема НЕ в том, что ему нужно добавлять на каждой итерации ... он должен просто открыть его один раз, написать, что он хочет, а затем закрыть его. Ваше предложениеf.close
является излишним. Когда вы открываете файл с использованием синтаксисаwith
, он автоматически закрывается при выходе интерпретатора из этого контекста.