2014-12-17 2 views
0

Это довольно запутанно. Когда у меня есть следующий код:Python не будет писать маленький объект в файл, но будет с большим объектом

lista = [i for i in range(10)]   

file=open("file.txt","a") 
file.write("\n") 
file.write("".join(str(lista))) 

Выходной файл "file.txt" будет пустым файлом с нулевыми байтами. Но когда я увеличиваю размер строки, которую нужно записать ...

lista = [i for i in range(10000)]  # Or larger  

file=open("file.txt","a") 
file.write("\n") 
file.write("".join(str(lista))) 

Это прекрасно работает. Хотя для меня это не имеет смысла, он ведет себя так, как будто минимальный размер файла для записи в выходной файл. Почему это? Является ли эта проблема уникальной для моей вычислительной среды?

Любая помощь приветствуется. Я работаю над Mac OS Yosemite. Python 3.

+0

Работает в Ubuntu и питона 3.4. Также, вероятно, вы хотите '" ".join (map (str, lista))' – Marcin

+3

Закрываете ли вы файлы после обеих операций? – kartikg3

+1

Вероятно, проблема с буферизацией. См. [Документация] (https://docs.python.org/2/library/functions.html#open). –

ответ

4

Вы должны вызвать метод close после написания чего-либо в файле.

lista = [i for i in range(10)]   

file=open("file.txt","a") 
file.write("\n") 
file.write("".join(str(lista))) 
file.close() 

Или используйте with заявление для автоматического закрытия файла:

lista = [i for i in range(10)]   

with open("file.txt","a") as file: 
    file.write("\n") 
    file.write("".join(str(lista))) 
+2

@Malonge метод 'write' на самом деле не пишет что-то в файл, он просто записывает данные в буфер, вы должны использовать метод close, чтобы сообщить ему, чтобы сбросить данные в файл а затем закройте его. – tianwei

+0

или даже 'file.flush()' разрешили бы его проблему ... но да, или закрытие - лучшее решение вообще (+1) –

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