Замена строки по номеру в файле на 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
Дешевле — быстрее ? Или что ты имеешь ввиду?
Как найти и заменить слова в файле на языке python?
В нем надо заменить _tNumb_, _sName_, _sNumb_,_ ip1_, _ip2_, на значения которые вводит пользователь.
Вот как сделал я:
repeat="y" while repeat == "y": keys=['_ip1_', '_ip2_', '_sName_', '_sNumb_', '_tNumb_'] print(keys) #print(keys[2]) print("+++++++++++++++++++++++++++++1") values=[] #ip1, ip2, sName, sNumb, tNumb = input("Enter the IP address1: "), input("Enter the IP address2: "), input("Enter the station name: "), input("Enter the station number: "), input("Enter the transmitter number: ") ip1, ip2, sName, sNumb, tNumb = 1111, 2222, 3333, 4444, 5555 values.append(ip1) values.append(ip2) values.append(sName) values.append(sNumb) values.append(tNumb) print(values) #print(values[2]) print("+++++++++++++++++++++++++++++2") dictionary=<> for i in range(len(keys)): dictionary[keys[i]] = values[i] search_text = dictionary[keys[i]] replace_text = keys[i] print(search_text) print(replace_text) print("+++++++++++++++++++++++++++++3") with open(r'template.txt', 'r') as oFile: rFile = oFile.read() #print(rFile) with open(r'output.txt', 'a') as wFile: wFile.write('\n') wFile.write('\n') wFile.write('\n') wFile.write(rFile) repeat = input("Do you want to continue? (y/n): ") if repeat == "n": break while (repeat!="y" and repeat!="n"): repeat = input("Please enter the correct answer (y/n): ")
У меня в файле output отображается только повтор текста как мне найти и изменить на нужные слова
- Вопрос задан более года назад
- 639 просмотров
4 комментария
Простой 4 комментария
Запись данных в файл
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()
Замена текста в файле. Функция replace() в Python не работает для файла?
Сколько читаю различных ответов, но так и не могу понять. Вроде должно работать.
В текстовом файле имеются уникальные «переменные» (текстовые строки) типа «abb1» , «abb2», «abb3».
Встречаются только по 1 разу каждая. Файл относительно небольшой — 2 Мб/4000 строк.
Должен ли я обязательно читать файл построчно? Из различных статей и ответов — не должен. Можно прочитать целиком и использовать функцию replace() сразу для всего файла. Тем более, у неё есть параметр количества замен.
Но на практике не заменят ничего.
abb = "abb1" result = "1234" with open("f1.svg", 'r') as f1, open("f2.svg", 'w') as f2: f1read= f1.read() f1read = f1read.replace(abb, result) f2.write(f1read)
- Вопрос задан более года назад
- 401 просмотр
9 комментариев
Простой 9 комментариев

Владимир Куц @fox_12 Куратор тега Python
У вас какая-то ерунда со скобками. Поправьте.
with open("f1.svg"), 'r') as f1, open("f2.svg"), 'w') as f
nik19 @nik19 Автор вопроса
Владимир Куц, Спасибо, но проблема не в них. Программа исполняется без ошибок, а замена не происходит.

Ну может файлы svg, векторная графика, имея другую кодировку открываются в другом виде, попробуй вывести результат в консоль (print(f1.read())
nik19 @nik19 Автор вопроса
Выводит весь файл. Файл SVG обычный текстовый. Вот строка из файла, где нужна замена:
abb1

Уточнения ради:
1. если вывести print(type(f1read)), выведет ?
2. В файле точно содержится искомое значение?
3. Искомое значение — латиница и цифры? Оно на одной строке?
nik19 @nik19 Автор вопроса
1. Да,
2. Да, причем не окруженное пробелами, т.е. . fnt4″>abb1
Функция же просто символы заменяет, не слова? Т.е. не должно быть пробел abb1 пробел.
И даже в строке fghfgfabb1hkh должен найти «abb1» и заменить на нужное «1234»?
3. Да, вот больший кусок проблемного кода и часть файла SVG для примера:
for d in range(1, 31 + 1): # d - номер дня cur.execute("""SELECT bm1, bm2, ab1, ab2, rk1, rk2, gk1, gk2, ym1, ym2 FROM days2 WHERE year=? AND month=? AND day=?;""", (yr, m, d) ) result = cur.fetchone() # Замена bmb = "bmb" + str(d) bme = "bme" + str(d) abb = "abb" + str(d) abe = "abe" + str(d) rkb = "rkb" + str(d) rke = "rke" + str(d) gkb = "gkb" + str(d) gke = "gke" + str(d) ymb = "ymb" + str(d) yme = "yme" + str(d) with open((path1 + svg1[m] + ".svg"), 'r') as f1, open((path1 + svg1[m] + "out.svg"), 'w') as f2: #print(f1.read()) f1read= f1.read() #print(type(f1read)) f1read = f1read.replace(bmb, result[0]) f1read = f1read.replace(bme, result[1]) f1read = f1read.replace(abb, result[2]) f1read = f1read.replace(abe, result[3]) f1read = f1read.replace(rkb, result[4]) f1read = f1read.replace(rke, result[5]) f1read = f1read.replace(gkb, result[6]) f1read = f1read.replace(gke, result[7]) f1read = f1read.replace(ymb, result[8]) f1read = f1read.replace(yme, result[9]) f2.write(f1read)
