LINUX.ORG.RU

Вставка строки в файл

 


0

2

Как лучше организовать? Я так понял, без полной перезаписи тут ни как не обойтись?

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

Что посоветуете?

Deleted

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

vurdalak ★★★★★
()

Есть идея открывать файл для чтения, считывать всю инфу в список, вставлять строку в список и полностью перезаписывать файл.

Создавай временный файл, переписывай туда содержимое целевого файла до позиции вставки, потом пиши свою строку, потом записывай остальное содержимое файла. Потом переименовываешь временный файл.

theNamelessOne ★★★★★
()
Ответ на: комментарий от theNamelessOne

Видимо, так и придется сделать.

Deleted
()

«Но этож уопротость, там таких файлов сотни. »

по 8*10^4 размером от 1 до 10 Мб, спокойно, быстро писал. (Хотя все относительно)

dimderbin
()
Ответ на: комментарий от theNamelessOne

Создавай временный файл, переписывай туда содержимое целевого файла до позиции вставки, потом пиши свою строку, потом записывай остальное содержимое файла. Потом переименовываешь временный файл.

Зачем же так...

f1 = open(filename, 'r') 
lines = f1.readlines()
lines.insert(N, 'string\n')
f1.close()
f1 = open(filename, 'w')
f1.writelines(lines)
f1.close()

dimderbin
()

ЕМНИП, если открыть для обновления, то можно писать в конец файла, не затирая все его содержимое: тыц

anonymous
()
Ответ на: комментарий от Deleted

А, вот тут уже печалька да :) Придется как-то изворачиваться, вроде, выше по треду уже показали, как можно сделать.

anonymous
()
Ответ на: комментарий от dimderbin

Зачем же так...

Затем, что безопаснее - всегда есть хотя бы один файл с данными?

Virtuos86 ★★★★★
()

А запилите однострочник!

Видел крутые однострочники на питоне, не подскажите, как и этот говнокусок в сабж превратить?

s = '   '
c = 0;

for i in s:
	if i == ' ':
		c += 1;
		
print c
П.С. блин, там надо считать пробелы до первого символа. Любого.

Deleted
()
Последнее исправление: Bizun (всего исправлений: 1)
Ответ на: комментарий от dimderbin

Зачем же так...

Затем, что не придётся размещать содержимое всего файла в памяти.

theNamelessOne ★★★★★
()
Ответ на: А запилите однострочник! от Deleted

А запилите однострочник! Видел крутые однострочники на питоне, не подскажите, как и этот говнокусок в сабж превратить?

s = '   '
c = 0;

for i in s:
	if i == ' ':
		c += 1;
		
print c

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

Плюс, если однострочник напишет кто-то, а не ты сам - как потом ты в нем разбираться будешь, понятного-то «говнокуска» под рукой уже не будет, ты же его удалишь?

Virtuos86 ★★★★★
()
Ответ на: комментарий от true_admin

Я так и предлагал. Коммент был к конкретному решению прочитать все строки в оперативу.

vurdalak ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.