Форум сайта python.su
Здравствуйте. Через поиск не нашел такой же темы. Мне необходимо вставить строку в определенную строку файла. Проблема в том, что я не могу как в С++ построчно считывать файл и следовательно не могу вставить в нужное место строку. Делаю так:
file = open('/struct/conf', 'r+)
for buf int file:
print file.tell()
Отредактировано (Июнь 21, 2011 17:37:58)
Офлайн
Насколько я знаю вставить строку в произвольное место файла без его перезаписи нельзя…
Можно как-то так:
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)
Офлайн
т е как я понимаю - файл надо полностью перезаписывать? Если так, то есть ли функция которая очищает весь файл?
Офлайн
В обоих вышеприведенных примерах файл будет перезаписан.
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)
Офлайн
большое спасибо за направление)
Офлайн
А как можно полностью стереть часть файла или весь файл? Отредактированный файл у меня храниться в буфере, но когда я записываю строку, которая больше бывшей строки, то часть текста затирается в следующей строке. Я знаю в Qt есть такая функция, а вот в Питоне есть?
Отредактировано (Июнь 22, 2011 14:38:40)
Офлайн
FroLПокажите этот буфер… не могу что-то представить.
Отредактированный файл у меня храниться в буфере, но когда я записываю строку, которая больше бывшей строки, то часть текста затирается в следующей строке.
Отредактировано (Июнь 22, 2011 14:46:22)
Офлайн
Все я понял! Я буду перезаписывать не весь файл, а только ниже вставленной строки =)
Офлайн
если нужно сделать эффективно - декларируйте что строки фиксированной длины например 256 символов
а дальше можете перезаписать нужную строку.
with open(“test.txt”,“rb+”) as f:
f.seek(i*256)
f.write(“asdas”)
f.seek(i*256)
print f.read(5)
только файл надо иметь готовый
Офлайн
спс за мысль, но проблема в том, что бы не переписывать строку, а добавлять новую. Но все равно спс)
Офлайн