Python: File IO - отключить добавочную очистку - PullRequest
3 голосов
/ 15 мая 2009

Вид противоположности этот вопрос .

Есть ли способ сказать Python "Не записывать на диск, пока я не скажу тебе". (закрывая или сбрасывая файл)? Я пишу в файл в сети и предпочел бы записать весь файл сразу.

Тем временем я пишу в буфер StringIO, а затем записываю это на диск в конце.

Ответы [ 3 ]

3 голосов
/ 15 мая 2009

Вы можете открыть свой файл с таким большим буфером, как захотите. Например, чтобы использовать до миллиарда байтов для буферизации, x=open('/tmp/za', 'w', 1000*1000*1000) - если у вас есть сто миллиардов байтов памяти и вы хотите использовать их все, просто добавьте еще * 100 ... ;-). Память будет расходоваться только в том количестве, которое действительно необходимо, так что не беспокойтесь ...

3 голосов
/ 15 мая 2009

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

Ваше текущее решение в основном та же концепция.

Вы могли бы использовать идею Алекса, но я рискнул бы против нее по следующим причинам:

  1. Размер буфера при открытии ограничен 2 ^ 31-1 или 2 гигабайтами. Любое большее значение приведет к «OverflowError: long int слишком велик для преобразования в int»
  2. Кажется, это не работает:

    a = open("blah.txt", "w", 2 ** 31 - 1)
    for i in xrange(10000): 
        a.write("a")
    

Откройте файл без закрытия python, и вы увидите текст

1 голос
/ 15 мая 2009

Я бы сказал, что это отчасти зависит от того, что вы пытаетесь сделать.

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

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

Если вы хотите этого по другим причинам, возможно, это не поможет.

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