[Решено]Python запись в начало файла.

Модератор: Модераторы разделов

Аватара пользователя
ffldove
Сообщения: 480
Статус: Keep It Simple, Stupid
ОС: RFRemix 14

[Решено]Python запись в начало файла.

Сообщение ffldove »

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

Код: Выделить всё

file=open('file', 'r+')
file.seek(0,0)
file.write('\n\n\n\n\n')
file.seek(0,0)
file.write('##############################################\n')

Не получается, записывает вместо всего содержимого эту одну строку. (вроде права стоят r+ или он все равно удаляет все что есть после добавленной строки?)
Можно ли как то это сделать или придется делать промежуточный файл туда все скидывать из исходного файла, изменять исходный файл и дописывать в конец из промежуточного?
I learned something today
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: [Решено]Python запись в начало файла.

Сообщение Alex2ndr »

Хе хе - только что на pythonua@conference.jabber.ru спрашивал как такое сделать :)
Итог таков - считать построчно в список строк(например через readlines), затем в данный список добавить нужные строки и потом записать этот список в файл.
Недостатки - весь файл окажется в памяти - если файл большой то она может закончиться :)
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: [Решено]Python запись в начало файла.

Сообщение Crazy »

Alex2ndr писал(а):
05.01.2010 23:31
Хе хе - только что на pythonua@conference.jabber.ru спрашивал как такое сделать :)
Итог таков - считать построчно в список строк(например через readlines), затем в данный список добавить нужные строки и потом записать этот список в файл.
Недостатки - весь файл окажется в памяти - если файл большой то она может закончиться :)

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

Desipere in loco
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: [Решено]Python запись в начало файла.

Сообщение Alex2ndr »

Crazy писал(а):
05.01.2010 23:44
открываешь новый файл, записываешь те самые строчки, копируешь все остальное, закрываешь файл, переименовываешь файл.

Я рассматривал более общий случай - как записать не только в начало, но и в середину файла. Если файл небольшой, то предложенный мной способ проще и удобнее чем работа с файлами. А вот если файл здоровый, то Ваш способ будет лучше - особенно если реализовать чтение через генераторы и иные ленивые способы.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: [Решено]Python запись в начало файла.

Сообщение NickLion »

Вариант номер 3.
0. Завести два буфера, каждый в размер вставляемого текста. В буфер 1 поместить вставляемый текст.
1. Сместиться к месту, где надо вставить строчки.
2. Считать в буфер 2 текст. Сместиться назад.
3. Записать содержимое буфера 1. Поменять буфера (или номера:) )
4. Пока не кончился файл, повторить с п.2.
5. Записать содержимое буфера 1 (оставшийся хвост, ага).
6. Пожалеть файл и не использовать этот метод.

:)
Спасибо сказали:
Аватара пользователя
Crazy
Сообщения: 862
Статус: Адепт Дзен.
ОС: Mint, Win7.

Re: [Решено]Python запись в начало файла.

Сообщение Crazy »

Alex2ndr писал(а):
06.01.2010 00:24
Crazy писал(а):
05.01.2010 23:44
открываешь новый файл, записываешь те самые строчки, копируешь все остальное, закрываешь файл, переименовываешь файл.

Я рассматривал более общий случай - как записать не только в начало, но и в середину файла. Если файл небольшой, то предложенный мной способ проще и удобнее чем работа с файлами. А вот если файл здоровый, то Ваш способ будет лучше - особенно если реализовать чтение через генераторы и иные ленивые способы.

Чем проще и удобней?
Копирование файла состоит из 3х операторов: оператор цикла, оператор чтения, оператор записи.
В общем случае размер файла неизвестен. Алгоритм выглядит так:
Копирование элементов до места вставки;
Вставка новых элементов;
Копирование оставшихся элементов.

За списками лежит динамическое управление памятью, все вызовы выделения/освобождения проходят через ОС.
В самой ОС организована память странично или сегментно-странично.
В общем случае операция вставки в список занимает N/2 операций.
И смысл экономить пару строк кода, когда такое неэффективное использование ресурсов?

Desipere in loco
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: [Решено]Python запись в начало файла.

Сообщение watashiwa_daredeska »

Crazy писал(а):
06.01.2010 14:21
За списками лежит динамическое управление памятью, все вызовы выделения/освобождения проходят через ОС.
Не все.

ffldove писал(а):
05.01.2010 22:52
Не получается, записывает вместо всего содержимого эту одну строку. (вроде права стоят r+ или он все равно удаляет все что есть после добавленной строки?)
It works for me. Но могу посоветовать делать file.close().


Crazy писал(а):
06.01.2010 14:21
В общем случае операция вставки в список занимает N/2 операций.
В питоне нет таких списков. Гонщик я, гонщик. © Ноль
Спасибо сказали: