2016-03-05 5 views
0

Обычно для записи в файл, я хотел бы сделать следующее:Использование метода «open() как файла», как писать более одного раза?

the_file = open("somefile.txt","wb") 
the_file.write("telperion") 

, но по какой-то причине, IPython (Jupyter) НЕ писать файлы. Это довольно странно, но единственный способ, которым я мог заставить его работать, если я пишу это так:

with open('somefile.txt', "wb") as the_file: 
    the_file.write("durin's day\n") 

with open('somefile.txt', "wb") as the_file: 
    the_file.write("legolas\n") 

Но, очевидно, это будет воссоздать объект файла и переписать его.

Почему код в первом блоке не работает? Как я мог сделать вторую работу блока?

+0

Открытие файла в режиме «w» «удаляет все данные в файле, если они существуют. –

+0

Попробуйте: 'the_file = open (" somefile.txt "," wb ", buffering = False)'. –

+0

Давайте вернемся к исходной записи. Ваши записи буферизуются, пока вы не написали блок данных или не закроете файл. Таким образом, вы еще не видите данные на диске. – tdelaney

ответ

5

Флаг w означает «открыт для записи и обрезания файла»; вы, вероятно, захотите открыть файл с флагом a, что означает «открыть файл для добавления».

Кроме того, кажется, что вы используете Python 2. Вы не должны использовать флаг b, за исключением случаев, когда вы пишете двоичный файл, а не обычный текстовый контент. В Python 3 ваш код приведет к ошибке.

Таким образом:

with open('somefile.txt', 'a') as the_file: 
    the_file.write("durin's day\n") 

with open('somefile.txt', 'a') as the_file: 
    the_file.write("legolas\n") 

Что касается ввода не отображается в файле с помощью filehandle = open('file', 'w'), это происходит потому, что выходной файл в буфер - только больший кусок написан в то время. Чтобы убедиться, что файл покраснел в конце ячейки, вы можете использовать filehandle.flush() в качестве последнего оператора.

+0

Я предполагаю, что часть, которая меня сбивает с толку, заключается в том, что я передаю этот объект файла различным функциям, поэтому я объявляю его как переменную. Если я создам файл w/'var = open (" file "," w ")', то как я могу добавить эту переменную позже? –

+0

@ O.rka: О буферизации в файле: оператор 'with' создает диспетчер контекста, который заботится о вызове' the_file.close() 'в конце и тем самым удаляет файл на диск. Если вы покинете свой Jupyter-процесс, файлы должны появиться. –

Смежные вопросы