.write не работает в Python - PullRequest
21 голосов
/ 12 мая 2011

Я довольно новичок в 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 создан, но оставлен пустым. Что дает?

Ответы [ 5 ]

41 голосов
/ 12 мая 2011

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

33 голосов
/ 12 мая 2011

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

with open('P4Output.txt', 'w') as f:
    f.write(output)
9 голосов
/ 12 мая 2011

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

outFile.flush()

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

3 голосов
/ 12 мая 2011

Попытайтесь заключить ваши операторы в блок 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)

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

0 голосов
/ 30 марта 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...