добавив пространство в выходной файл без необходимости сначала прочитать всю вещь - PullRequest
3 голосов
/ 16 июня 2010

Вопрос: Как записать данные в уже существующий файл в начале файла без записи поверх того, что уже есть, и без чтения всего файла в память? (например, prepend)


Информация:

Я сейчас работаю над проектом, где программа часто сбрасывает данные в файл. этот файл очень быстро раздувается до 3-4 ГБ. Я запускаю эту симуляцию на компьютере с 768 МБ оперативной памяти. перетягивание всех этих данных в оперативную память будет большой болью и огромной тратой времени. Моделирование уже занимает достаточно много времени, чтобы работать как есть.

Файл структурирован таким образом, что количество создаваемых им дампов вначале указывается с простым значением, например, 6. Каждый раз, когда программа создает новый дамп, я хочу, чтобы его увеличивали, так что теперь он равен 7. проблема с 10-м, 100-м, 1000-м и т. д. программа введет 10 просто отлично, но уберет первую букву следующей строки:

"9 \ n580,2995,2083,028 \ п ..."

"10 \ n80,2995,2083,028 \ п ..."

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

По сути, я ищу какую-то функцию prepend. что-то, чтобы добавить данные в начало файла вместо конца.

Запрограммировано на Python

~ п

Ответы [ 3 ]

2 голосов
/ 16 июня 2010

Смотрите ответы на этот вопрос: Как изменить текстовый файл в Python?

Резюме: вы не можете сделать это без чтения файла (это связано с тем, как работает операционная система, а не с ограничениями Python)

1 голос
/ 16 июня 2010

Это не относится к вашему первоначальному вопросу, но вот некоторые возможные обходные пути:

  • Используйте SQLite (в комплекте с вашим Python)
  • Используйте более привлекательную базу данных, RDBMS или NoSQL
  • Просто отследите количество дампов в другом текстовом файле

Первые несколько опций немного более просты, но обеспечивают большую гибкость. Последний вариант - самое простое решение вашей текущей проблемы.

0 голосов
/ 16 июня 2010

Вы можете довольно легко создать новый файл, вывести данные, которые вы хотите добавить в этот файл, а затем скопировать содержимое существующего файла и добавить его в новый, затем переименовать.

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

...