Как заменить строку в файле если она соответствует нескольким условиям

Александр17

Новичок
Пользователь
Ноя 30, 2021
3
0
1
1. Windows 10
2. Python 3.10.0
Python:
file = open( 'BOGDANOLD.txt', 'r' )
stroki = file.readlines()

for stroki_red in stroki:
    #замена
    #strokinew = stroki_red.replace( "05" and "Правая", "333333" ).replace( "01", "1111111" ) - не работает, заменяет только последний аргумент "Правая"
    #Возвращает список из строк
    strokinew = stroki_red.split("s") #s - для того чтобы текст был целиком
    print ( strokinew )
Подскажите как заменить всю строку если в ней совпадают определенные слова или цифры, Например если в строке есть слова ДЦ, Правая, то заменить всю строку на 111111, если только ДЦ то на 222222. Пробовал .replace, он заменяет только 1 слово, а не всю строку и if, там понял как написать все эти условия но как заменить строку не знаю. Приложил файлы OLD, это то что есть, и NEW что должно быть на выходе
 

Вложения

  • BOGDANNEW.txt
    64 байт · Просмотры: 2
  • BOGDANOLD.txt
    150 байт · Просмотры: 2

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 672
478
83
можно так
Python:
with open("BOGDANOLD.txt", "r") as f:
    rd = f.readlines()
    for i in rd:
        if "GS" in i:
            rd[rd.index(i)] = "111111"
        elif "04" in i:
            rd[rd.index(i)] = "222222"
        elif "Правая" in i and "ДЦ" in i:
            rd[rd.index(i)] = "333333"
        elif "Левая" in i:
            rd[rd.index(i)] = "444444"
        elif "Правая" in i:
            rd[rd.index(i)] = "555555"
        elif "Мет" in i and "0" in i:
            rd[rd.index(i)] = "666666"
        elif "ЖБ" in i:
            rd[rd.index(i)] = "777777"
        elif "Мет" in i:
            rd[rd.index(i)] = "888888"

with open("BOGDANNEW.txt", "w") as f:
    f.write("\n".join(rd))
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 672
478
83
я так понимаю он берет первое условие и проверяет на него все строки, если находит совпадение заменяет
нет, в rd - список строк, цикл for перебирает строки по очереди и проверяет все условия для каждой строки по отдельности...

с циклом while
Python:
with open("BOGDANOLD.txt", "r") as f:
    rd = f.readlines()
    count = 0
    while count < len(rd):
        if "GS" in rd[count]:
            rd[rd.index(rd[count])] = "111111"
        elif "04" in rd[count]:
            rd[rd.index(rd[count])] = "222222"
        elif "Правая" in rd[count] and "ДЦ" in rd[count]:
            rd[rd.index(rd[count])] = "333333"
        elif "Левая" in rd[count]:
            rd[rd.index(rd[count])] = "444444"
        elif "Правая" in rd[count]:
            rd[rd.index(rd[count])] = "555555"
        elif "Мет" in rd[count] and "0" in rd[count]:
            rd[rd.index(rd[count])] = "666666"
        elif "ЖБ" in rd[count]:
            rd[rd.index(rd[count])] = "777777"
        elif "Мет" in rd[count]:
            rd[rd.index(rd[count])] = "888888"
        count += 1

with open("BOGDANNEW.txt", "w") as f:
    f.write("\n".join(rd))
 

Александр17

Новичок
Пользователь
Ноя 30, 2021
3
0
1
можно так
Python:
with open("BOGDANOLD.txt", "r") as f:
    rd = f.readlines()
    for i in rd:
        if "GS" in i:
            rd[rd.index(i)] = "111111"
        elif "04" in i:
            rd[rd.index(i)] = "222222"
        elif "Правая" in i and "ДЦ" in i:
            rd[rd.index(i)] = "333333"
        elif "Левая" in i:
            rd[rd.index(i)] = "444444"
        elif "Правая" in i:
            rd[rd.index(i)] = "555555"
        elif "Мет" in i and "0" in i:
            rd[rd.index(i)] = "666666"
        elif "ЖБ" in i:
            rd[rd.index(i)] = "777777"
        elif "Мет" in i:
            rd[rd.index(i)] = "888888"

with open("BOGDANNEW.txt", "w") as f:
    f.write("\n".join(rd))
Здравствуйте, огромное спасибо, все работает, я так понимаю он берет первое условие и проверяет на него все строки, если находит совпадение заменяет. Ещё пара вопросов, можно ли через цикл while сделать так чтобы он проверял наоборот, т.е. сначала первую строку на все условия, потом переходил на вторую и так далее? И второй чтобы он искал только точные совпадения, то есть если ищу '04' и в строке есть запись '5048' он не заменял эту строку
 
Последнее редактирование:

Александр17

Новичок
Пользователь
Ноя 30, 2021
3
0
1
нет, в rd - список строк, цикл for перебирает строки по очереди и проверяет все условия для каждой строки по отдельности...

с циклом while
Python:
with open("BOGDANOLD.txt", "r") as f:
    rd = f.readlines()
    count = 0
    while count < len(rd):
        if "GS" in rd[count]:
            rd[rd.index(rd[count])] = "111111"
        elif "04" in rd[count]:
            rd[rd.index(rd[count])] = "222222"
        elif "Правая" in rd[count] and "ДЦ" in rd[count]:
            rd[rd.index(rd[count])] = "333333"
        elif "Левая" in rd[count]:
            rd[rd.index(rd[count])] = "444444"
        elif "Правая" in rd[count]:
            rd[rd.index(rd[count])] = "555555"
        elif "Мет" in rd[count] and "0" in rd[count]:
            rd[rd.index(rd[count])] = "666666"
        elif "ЖБ" in rd[count]:
            rd[rd.index(rd[count])] = "777777"
        elif "Мет" in rd[count]:
            rd[rd.index(rd[count])] = "888888"
        count += 1

with open("BOGDANNEW.txt", "w") as f:
    f.write("\n".join(rd))
Все разобрался, спасибо за помощь)
 

Форум IT Специалистов