Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 21, 2011 17:35:47

FroL
От:
Зарегистрирован: 2011-06-21
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Здравствуйте. Через поиск не нашел такой же темы. Мне необходимо вставить строку в определенную строку файла. Проблема в том, что я не могу как в С++ построчно считывать файл и следовательно не могу вставить в нужное место строку. Делаю так:

file = open('/struct/conf', 'r+)
for buf int file:
print file.tell()
но выводится все время позиция конца файла(. Как решить эту проблему?



Отредактировано (Июнь 21, 2011 17:37:58)

Офлайн

#2 Июнь 21, 2011 20:33:23

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Насколько я знаю вставить строку в произвольное место файла без его перезаписи нельзя…

Можно как-то так:

line_number = 5
filename = 'test'
with open(filename) as f:
lines = f.readlines()
lines.insert(line_number, 'BLAH\n')
with open(filename, 'w') as f:
f.write(''.join(lines))
Или так:
import fileinput
for num, line in enumerate(fileinput.input('test', inplace=1)):
print line,
if num == 6:
print '!!foo bar!!'
или еще как-нибудь.



Отредактировано (Июнь 21, 2011 20:57:21)

Офлайн

#3 Июнь 21, 2011 21:35:17

FroL
От:
Зарегистрирован: 2011-06-21
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

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

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



Офлайн

#4 Июнь 21, 2011 21:39:24

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

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

В обоих вышеприведенных примерах файл будет перезаписан.
http://docs.python.org/library/functions.html#open
http://docs.python.org/library/fileinput.html

ЗЫ: Забыл про writelines, первый пример вот так (а то сейчас налетят коршуны и заклюют :)):

line_number = 5
filename = 'test'
with open(filename) as f:
lines = f.readlines()
lines.insert(line_number, 'BLAH\n')
with open(filename, 'w') as f:
f.writelines(lines)



Отредактировано (Июнь 21, 2011 21:43:55)

Офлайн

#5 Июнь 21, 2011 21:40:23

FroL
От:
Зарегистрирован: 2011-06-21
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

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

большое спасибо за направление)



Офлайн

#6 Июнь 22, 2011 14:38:14

FroL
От:
Зарегистрирован: 2011-06-21
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

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

А как можно полностью стереть часть файла или весь файл? Отредактированный файл у меня храниться в буфере, но когда я записываю строку, которая больше бывшей строки, то часть текста затирается в следующей строке. Я знаю в Qt есть такая функция, а вот в Питоне есть?



Отредактировано (Июнь 22, 2011 14:38:40)

Офлайн

#7 Июнь 22, 2011 14:45:00

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

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

FroL
Отредактированный файл у меня храниться в буфере, но когда я записываю строку, которая больше бывшей строки, то часть текста затирается в следующей строке.
Покажите этот буфер… не могу что-то представить.

ЗЫ:
Стереть весь файл - open с флагом ‘w’ - файл перезапишется.
Стереть часть файла - читаем файл -> выкидываем ненужное -> перезаписываем файл



Отредактировано (Июнь 22, 2011 14:46:22)

Офлайн

#8 Июнь 22, 2011 15:35:22

FroL
От:
Зарегистрирован: 2011-06-21
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

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

Все я понял! Я буду перезаписывать не весь файл, а только ниже вставленной строки =)



Офлайн

#9 Июнь 22, 2011 21:23:57

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

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

если нужно сделать эффективно - декларируйте что строки фиксированной длины например 256 символов
а дальше можете перезаписать нужную строку.
with open(“test.txt”,“rb+”) as f:
f.seek(i*256)
f.write(“asdas”)
f.seek(i*256)
print f.read(5)

только файл надо иметь готовый



Офлайн

#10 Июнь 22, 2011 22:00:07

FroL
От:
Зарегистрирован: 2011-06-21
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

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

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



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version