Замена строки по номеру в файле на Python
Есть файл в нем 100 строк и они не будет меняться, кроме одной, а также их положение не будет меняться, т.е номера остаются прежними. Мне нужно на Python заменить 20 строку целиком на другою строку полностью. так чтобы ее номер не поменялся. Как это можно сделать?
knigolaz
20.08.19 14:07:16 MSK
Важно — содержимое строки заранее не известно,т.е нужно найти ее по номеру и заменить.
knigolaz
( 20.08.19 14:10:24 MSK ) автор топика
Ответ на: комментарий от knigolaz 20.08.19 14:10:24 MSK
Читать построчно и писать в новый файл. Дошёл до нужной строки, сдела что надо, продолжил читать и писать.
А если, всего 100 строк, то можно считать в список, поменять нужную строку и переписать файл.
vvn_black ★★★★★
( 20.08.19 14:26:07 MSK )
Последнее исправление: vvn_black 20.08.19 14:30:10 MSK (всего исправлений: 1)
Второй вариант, вызвать sed из питона.
vvn_black ★★★★★
( 20.08.19 14:26:47 MSK )
Ответ на: комментарий от vvn_black 20.08.19 14:26:47 MSK

Самое интересное, что вызывать некоторые утилиты из питона иногда выходит дешевле, чем нативными методами обрабатывать
ZERG ★★★★★
( 20.08.19 16:17:21 MSK )
Как это к тематике форума относится? Иди на питонофорумы и там спрашивай.
anonymous
( 20.08.19 16:39:59 MSK )
if __name__ == "__main__": with open('test.txt', 'r+') as fd: lines = fd.readlines() fd.seek(0) fd.writelines(lines[:19] + ['blah'] + lines[20:])
Novel ★★★★
( 20.08.19 16:45:38 MSK )
Извините, может вам всё же прочитать какое-нибудь руководство для новичков по Python?
te111011010 ★
( 20.08.19 16:49:15 MSK )
Ответ на: комментарий от ZERG 20.08.19 16:17:21 MSK
Дешевле — быстрее ? Или что ты имеешь ввиду?
Запись данных в файл
21 августа 2013 г.
Archy
Python для начинающих » Общие вопросы
7

Как осуществить чтение из файла мы обсудили в прошлой статье. В данной статье мы обсудим способы записи данных в файл. Чтобы не было ошибки из за доступа, убедитесь, что в папке где вы хотите выполнить изменения или сам файл имеют права 777.
Чтобы не соскучится, мы покажем несколько способов внесения данных в файл и наглядно увидим результат. Чтобы открыть файл для записи или же создать его, мы воспользуемся функцией open(filename, mod) и в качестве второго параметрам mod укажем значение w т.е. (write) запись. Если файл с указанным названием filename не существует — он будет создан.
Создаем новый файл в Python
# -*- coding: utf-8 -*- my_file = open('snake.txt', 'w') # Закрываем файл my_file.close()
После выполнения данного скрипта, по указанному нами пути будет создан новый файл snake.txt если файл не был создан то нужно проверить права доступа на папку. Стоит учесть, что если файл snake.txt существовал ранее, то после открытия его функцией open() и мод W, тогда содержимое файла удаляется. Если вы хотите добавить что-то в конце, то следует использовать мод ‘a+’.
Запись данных в файл Python
Предположим, что мы создали новый файл и хотим в него внести некий текст, для этого воспользуемся методом write().
# -*- coding: utf-8 -*- my_file = open('snake.txt', 'w') text_for_file = 'Some text here. ' my_file.write(text_for_file) my_file.close()
Как редактировать определенную строку в Python?
Как мне написать еще кусок кода но между Строкой Кода 1 и 2?
или наоборот удалить кусок кода в данной области?
- Вопрос задан более двух лет назад
- 1313 просмотров
Комментировать
Решения вопроса 1

soremix @SoreMix Куратор тега Python
Читаем строки из файла в виде списка
with open('tmp.txt', 'r') as NewPrj_kv: lines = NewPrj_kv.readlines()
Дальше со списком делайте, что хотите. Новую строку вставляйте в конец, в определенное место, через insert lines.insert(2, ‘new line\n’) , удаляйте, через del lines[X] и тд
Потом так же список записываем
with open('tmp.txt', 'w') as NewPrj_kv: NewPrj_kv.writelines(lines)
Ответ написан более двух лет назад
Нравится 1 13 комментариев

Стас Поваляев @cout_HelloWorld_andl Автор вопроса
а строка NewPrj_kv.writelines(lines)
lines это писать одну строку потом с новой строчки писать снова
NewPrj_kv.writelines(lines)?
или lines можно писать блок кода (многострочный текст)?
так же что значит двойка в строке
lines.insert(2, ‘new line\n’)?

soremix @SoreMix Куратор тега Python
cout_HelloWorld_andl, не понял. writelines принимает список из строк, которые будут записаны в файл. Новая строка обозначается символом \n

Стас Поваляев @cout_HelloWorld_andl Автор вопроса

что значит число 2?

soremix @SoreMix Куратор тега Python

Стас Поваляев @cout_HelloWorld_andl Автор вопроса
soremix, можете пожалуйста дать пример? я новичок просто

soremix @SoreMix Куратор тега Python
cout_HelloWorld_andl, пример чего?

Стас Поваляев @cout_HelloWorld_andl Автор вопроса

soremix @SoreMix Куратор тега Python
with open('tmp.txt', 'r') as NewPrj_kv: lines = NewPrj_kv.readlines() lines.insert(2, 'new line\n') with open('tmp.txt', 'w') as NewPrj_kv: NewPrj_kv.writelines(lines)

Стас Поваляев @cout_HelloWorld_andl Автор вопроса
soremix, а как вот скажите пожалуйста в строке
with open(‘tmp.txt’, ‘r’) as NewPrj_kv:
что бы он открыл в конкретной папке файл?

Стас Поваляев @cout_HelloWorld_andl Автор вопроса
soremix, и это не так работает, простите что надоедаю)
вот в файле изначально данный код:
ScreenManager: id: screen_manager start: start Start: id: start name: 'Start' manager: screen_manager : size_box: '50dp', '50dp' rad: [50,50,50,50] canvas.before: Color: rgba: .1,.2,.3,1 RoundedRectangle: pos: self.pos size: self.size radius: self.rad if self.rad else [0, 0, 0, 0] size_hint: None, None size: root.size_box : mesage: mesage canvas.before: Color: rgba: 1,1,1,1 Rectangle: pos: self.pos size: self.size GridLayout: cols: 1 rows: 1 GridLayout: cols: 3 rows: 1 FloatLayout: Message: pos_hint: id: mesage opacity: 0 Label: opacity: 0 text: 'your project'
после того как программа дописала в файл new line, то получаешься это:
new line new line ScreenManager: id: screen_manager start: start Start: id: start name: 'Start' manager: screen_manager : size_box: '50dp', '50dp' rad: [50,50,50,50] canvas.before: Color: rgba: .1,.2,.3,1 RoundedRectangle: pos: self.pos size: self.size radius: self.rad if self.rad else [0, 0, 0, 0] size_hint: None, None size: root.size_box : mesage: mesage canvas.before: Color: rgba: 1,1,1,1 Rectangle: pos: self.pos size: self.size GridLayout: cols: 1 rows: 1 GridLayout: cols: 3 rows: 1 FloatLayout: Message: pos_hint: id: mesage opacity: 0 Label: opacity: 0 text: 'your project'
а надо что бы в после
GridLayout: cols: 3 rows: 1
Перезапись строки в файле

Приветствую всех!
Тут возникла необходимость перезаписать единственную строку в файле.
1. Прочитать файл;
2. Найти искомую строку;
3. Отсортировать содержимое строки;
4. Записать измененную строку(желательно, но необязательно в тоже самое место).
Ну с первыми двумя пунктами более или менее ясно, то с третьим и четвертым уже не так очевидно(если не сказать более).
В пример приведу файл make.conf, в которой надо сортировать третью строку:
1 2 3 4 5
. PYTHON_SINGLE_TARGET="python3_4" USE="-* X alsa nls ncurses zlib readline xattr unicode asm cxx threads iptables berkdb ipv6 bzip2 mime jit acl" PORTDIR="/usr/portage" .
С какой стороны к этому подойти?
Спасибо!
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Перезапись отдельно одной строки в CSV файл
Возможно ли вообще такое — записать одну строку в фаил? Пример: у меня CSV фаил 1000 строк. Я хочу.
Поиск строк с нужным словом в файле .csv и перезапись этих строк в новый файл Python
Добрый день. Господа программисты, нужна Ваша помощь. Возникла необходимость написать.
перезапись строки в файле
Здравствуйте! Такая задумка: в таймере записывается строка в файл(StreamWriter,sw.write("dsfs");.
Поиск строки в файле и её перезапись
Здравствуйте, я хочу чтобы моя программа находила строку в файле config.cfg и перезаписывала её.
Можно ли осуществить перезапись строки в файле
Итак,может не совсем правильная формулировка проблемы,но постараюсь изложить ее.Работа идет с.
![]()
5417 / 3841 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1

Сообщение было отмечено Delvin-fil как решение
Решение
Если не заморачиваться поиском строки регуляркой и забыть про элегантные красивости с генераторами, то весь процесс простая последовательность чисто механических действий.
Поделить, убрать лишние символы, разбить на слова, отсортировать, соединить с добавлением нужных символов конца строки и обрамляющих кавычек и записать обратно. Все это, конечно, можно и покрасивее сделать. Но в первом приближении — делает, как мне кажется, именно то, что вам нужно.
1 2 3 4 5 6 7 8 9
with open('make.txt','r+') as f: lines = f.readlines() # прочитать файл в список строк str_parts = lines[1].split('=') # делим вторую строку USE="-* X alsa nls ncurses . на две части #print(str_parts) new_str = str_parts[0] + '=' + '"' + ' '.join(sorted(str_parts[1].strip().replace('"','').split())) + '"' + '\n' print(new_str) lines[1] = new_str # записать в то же место измененную строку f.seek(0) # указатель файла на начало f.writelines(lines)
Если сортировка по умолчанию не совсем устраивает — то нужно уже указать sorted как мы хотим сортировать.
Добавлено через 11 минут
P.S. Если положение строки неизвестно — тогда можно в цикле по полученному списку поискать проверкой на вхождение подстроки USE.