Ответ 1
Вы сделали f.close()
в конце своей программы?
Я новичок в 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 создается, но остается пустым. Что дает?
Вы сделали f.close()
в конце своей программы?
Из-за буферизации строка может не отображаться в файле до тех пор, пока вы не назовете flush()
или close()
. Поэтому попробуйте вызвать f.close()
после f.write()
. Также рекомендуется использовать with
с файловыми объектами, он автоматически закроет файл для вас, даже если вы выйдете из блока with
раньше из-за исключения или инструкции return
.
with open('P4Output.txt', 'w') as f:
f.write(output)
Вам нужно сделать
outFile.flush()
если вы хотите записать буферное содержимое на диск.
Если вы закончите запись в файл, вызов file.close
неявно очистит буферные данные перед закрытием файла.
Попробуйте заключить свои операторы в блок 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)
И всегда закройте свой файл, чтобы система могла очистить ваши данные до файла, прежде чем закрывать его.
У меня было такое же наблюдение. Я выполнял свой код на удаленном сервере, и он не печатал ничего в текстовый файл, потому что на сервере не хватило времени ожидания и выход из моего кода без перехода к функции f.close().
возможно, вы должны использовать абсолютный путь вместо относительного.