Найти - Пользователи
Полная версия: Вставка строки в текстовый файл
Начало » Центр помощи » Вставка строки в текстовый файл
1 2 3
FroL
Здравствуйте. Через поиск не нашел такой же темы. Мне необходимо вставить строку в определенную строку файла. Проблема в том, что я не могу как в С++ построчно считывать файл и следовательно не могу вставить в нужное место строку. Делаю так:

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

Можно как-то так:
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
т е как я понимаю - файл надо полностью перезаписывать? Если так, то есть ли функция которая очищает весь файл?
pill
В обоих вышеприведенных примерах файл будет перезаписан.
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)
FroL
большое спасибо за направление)
FroL
А как можно полностью стереть часть файла или весь файл? Отредактированный файл у меня храниться в буфере, но когда я записываю строку, которая больше бывшей строки, то часть текста затирается в следующей строке. Я знаю в Qt есть такая функция, а вот в Питоне есть?
pill
FroL
Отредактированный файл у меня храниться в буфере, но когда я записываю строку, которая больше бывшей строки, то часть текста затирается в следующей строке.
Покажите этот буфер… не могу что-то представить.

ЗЫ:
Стереть весь файл - open с флагом ‘w’ - файл перезапишется.
Стереть часть файла - читаем файл -> выкидываем ненужное -> перезаписываем файл
FroL
Все я понял! Я буду перезаписывать не весь файл, а только ниже вставленной строки =)
doza_and
если нужно сделать эффективно - декларируйте что строки фиксированной длины например 256 символов
а дальше можете перезаписать нужную строку.
with open(“test.txt”,“rb+”) as f:
f.seek(i*256)
f.write(“asdas”)
f.seek(i*256)
print f.read(5)

только файл надо иметь готовый
FroL
спс за мысль, но проблема в том, что бы не переписывать строку, а добавлять новую. Но все равно спс)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB