Вот мой код,
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 !
Может ли кто-нибудь помочь мне в этом?
Спасибо !
Я сделал несколько рефакторингов для вашего исходного кода и сделал его результатом, который вы ищете,
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!
Надеюсь это поможет
open()
для вашего входного файла; второе: используйтеre.sub()
для подстановки регулярных выражений2590552
предметом для замены? В вашем коде, похоже, отсутствует эта логика. После того, как вы это определили, достаточно просто использовать командуreplace
(regex.sub
илиstr.replace
) в логике, которая говорит: «Если в этой строке появляетсяinput_value
, тогда заменитеtarget
наoutput_value
.