FroL
Июнь 21, 2011 17:35:47
Здравствуйте. Через поиск не нашел такой же темы. Мне необходимо вставить строку в определенную строку файла. Проблема в том, что я не могу как в С++ построчно считывать файл и следовательно не могу вставить в нужное место строку. Делаю так:
file = open('/struct/conf', 'r+)
for buf int file:
print file.tell()
но выводится все время позиция конца файла(. Как решить эту проблему?
pill
Июнь 21, 2011 20:33:23
Насколько я знаю вставить строку в произвольное место файла без его перезаписи нельзя…
Можно как-то так:
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!!'
или еще как-нибудь.
FroL
Июнь 21, 2011 21:35:17
т е как я понимаю - файл надо полностью перезаписывать? Если так, то есть ли функция которая очищает весь файл?
pill
Июнь 21, 2011 21:39:24
В обоих вышеприведенных примерах файл будет перезаписан.
http://docs.python.org/library/functions.html#openhttp://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)
FroL
Июнь 21, 2011 21:40:23
большое спасибо за направление)
FroL
Июнь 22, 2011 14:38:14
А как можно полностью стереть часть файла или весь файл? Отредактированный файл у меня храниться в буфере, но когда я записываю строку, которая больше бывшей строки, то часть текста затирается в следующей строке. Я знаю в Qt есть такая функция, а вот в Питоне есть?
pill
Июнь 22, 2011 14:45:00
FroL
Отредактированный файл у меня храниться в буфере, но когда я записываю строку, которая больше бывшей строки, то часть текста затирается в следующей строке.
Покажите этот буфер… не могу что-то представить.
ЗЫ:
Стереть весь файл - open с флагом ‘w’ - файл перезапишется.
Стереть часть файла - читаем файл -> выкидываем ненужное -> перезаписываем файл
FroL
Июнь 22, 2011 15:35:22
Все я понял! Я буду перезаписывать не весь файл, а только ниже вставленной строки =)
doza_and
Июнь 22, 2011 21:23:57
если нужно сделать эффективно - декларируйте что строки фиксированной длины например 256 символов
а дальше можете перезаписать нужную строку.
with open(“test.txt”,“rb+”) as f:
f.seek(i*256)
f.write(“asdas”)
f.seek(i*256)
print f.read(5)
только файл надо иметь готовый
FroL
Июнь 22, 2011 22:00:07
спс за мысль, но проблема в том, что бы не переписывать строку, а добавлять новую. Но все равно спс)