Подтвердить что ты не робот

.write не работает в Python

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

outFile = open('P4Output.txt', 'w')
outFile.write(output)
print output
print "Output saved to \"P4Output.txt\"\n"

вывод корректно выводится на консоль, но если я открою файл, он будет пустым. Если я удалю файл и снова запустил свою программу, файл будет создан, но все равно пуст. Я использовал этот тот же самый блок кода в другой моей программе ранее, и он работал, и все еще работает. Однако, если я открою Python и попробую что-то простое:

f = open('test.txt', 'w')
f.write("test")

Снова, test.txt создается, но остается пустым. Что дает?

4b9b3361

Ответ 1

Вы сделали f.close() в конце своей программы?

Ответ 2

Из-за буферизации строка может не отображаться в файле до тех пор, пока вы не назовете flush() или close(). Поэтому попробуйте вызвать f.close() после f.write(). Также рекомендуется использовать with с файловыми объектами, он автоматически закроет файл для вас, даже если вы выйдете из блока with раньше из-за исключения или инструкции return.

with open('P4Output.txt', 'w') as f:
    f.write(output)

Ответ 3

Вам нужно сделать

outFile.flush()

если вы хотите записать буферное содержимое на диск. Если вы закончите запись в файл, вызов file.close неявно очистит буферные данные перед закрытием файла.

Ответ 4

Попробуйте заключить свои операторы в блок try/catch, чтобы узнать, происходит ли что-то во время открытия или записи в файл:

try:
    outFile = open('P4Output.txt','w')
    outFile.write(output)
    outFile.close()
except IOError as (errno,strerror):
    print "I/O error({0}): {1}".format(errno, strerror)

И всегда закройте свой файл, чтобы система могла очистить ваши данные до файла, прежде чем закрывать его.

Ответ 5

У меня было такое же наблюдение. Я выполнял свой код на удаленном сервере, и он не печатал ничего в текстовый файл, потому что на сервере не хватило времени ожидания и выход из моего кода без перехода к функции f.close().

Ответ 6

возможно, вы должны использовать абсолютный путь вместо относительного.