Поиск строки и замена значения

1

Вот мой код,

import os, os.path
import collections
import sys
import re

DIR_DAT = "dat"
DIR_OUTPUT = "output"
filenames = []
data = []

#in case if output folder doesn't exist
if not os.path.exists(DIR_OUTPUT):
    os.makedirs(DIR_OUTPUT)

input_file = 'axcfgpasww-from-server.dat'
element = sys.argv[1]
output_value = sys.argv[2]

with open(input_file) as infile, open('axcfgpasww-modified.dat', "w") as outfile:
    if element in open(input_file).read():
        regex = re.findall("\s*([\S\s]+)", element)

        outfile.write(regex[0])
        print(regex[0])
    else:
        print('No match found')

Входной_файл:

CMD_VERS=2
CMD_TRNS=O
CMD_REINIT=N
CMD_ORDER=MAJECR
CMD_COMM=2590552
NUM_COMM:nNN0.7=2590552

Я выполняю свой сценарий таким образом: modify_file.py NUM_COMM:nNN0.7 Hello world !

Поэтому, если в NUM_COMM:nNN0.7 существует NUM_COMM:nNN0.7, он записывает "NUM_COMM: nNN0.7" в новый файл axcfgpasww-modified.dat.

Но то, что я хочу сделать, исполняет мою команду, как написано выше. И результатом является входной файл с новым значением.

Таким образом, мой выходной файл будет:

CMD_VERS=2
CMD_TRNS=O
CMD_REINIT=N
CMD_ORDER=MAJECR
CMD_COMM=2590552
NUM_COMM:nNN0.7=Hello world !

Может ли кто-нибудь помочь мне в этом?

Спасибо !

  • 3
    Первое: вы дважды вызываете open() для вашего входного файла; второе: используйте re.sub() для подстановки регулярных выражений
  • 0
    Какая логика делает 2590552 предметом для замены? В вашем коде, похоже, отсутствует эта логика. После того, как вы это определили, достаточно просто использовать команду replace ( regex.sub или str.replace ) в логике, которая говорит: «Если в этой строке появляется input_value , тогда замените target на output_value .
Теги:

1 ответ

1
Лучший ответ

Я сделал несколько рефакторингов для вашего исходного кода и сделал его результатом, который вы ищете,

import os, os.path
import collections
import sys
import re

DIR_DAT = "dat"
DIR_OUTPUT = "output"
filenames = []
data = []
found = False

#in case if output folder doesn't exist
if not os.path.exists(DIR_OUTPUT):
    os.makedirs(DIR_OUTPUT)

input_file = 'axcfgpasww-from-server.dat'
element = sys.argv[1]
output_value = sys.argv[2]

with open(input_file) as infile:
    for line in infile.readlines():
        if element in line:
            old_value = line.split("=")[1]
            data.append(line.replace(old_value, output_value))
            found = True
        else:
            data.append(line)
if not found:
    print('No match found')

with open(input_file, 'w') as outfile:
    for line in data:
        outfile.write(line)

выход:

CMD_VERS=2
CMD_TRNS=O
CMD_REINIT=N
CMD_ORDER=MAJECR
CMD_COMM=2590552
NUM_COMM:nNN0.7=Hello World!

Надеюсь это поможет

  • 1
    Спасибо, это работает как шарм! У меня просто было «data.append (line.replace (old_value, output_value + '\ n'))» для возврата строки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню