在python中用相同的根替换变量文本

2024-05-01 22:02:45 发布

您现在位置:Python中文网/ 问答频道 /正文

你好我是新来的python我有这个简单的代码来代替文本。 所有的链接都可以,但是我需要用引号替换-DeviceMap“32”-Phsig 33部分,并用比前面少一个的数字替换。这很容易吗?你知道吗

import os
import shutil

os.chdir('C:\\konverze')

print(os.getcwd())

print (os.listdir())

shutil.copy2('C:\\konverze\EIO.CFG', 'C:\\konverze\EIO_konvertovane.CFG')

print ("kopírování File EIO.CFG bylo úspěšné")

s = open("EIO.CFG").read()
s = s.replace('-Unit', '-Device')
s = s.replace('-Type', '-SignalType')
s = s.replace('-Phsig', '-DeviceMap')

f = open("EIO_konvertovane.CFG", 'w')
f.write(s)
f.close()

TXT文件示例:

  -Name "diSPARE00" -Type "DI" -Unit "SIM_BOARD" -Phsig 1

  -Name "doMotOnState" -Type "DO" -Unit "DP_BOARD" -Phsig 33\
  -Access "System"

  -Name "doService" -Type "DO" -Unit "DP_BOARD" -Phsig 44 -Access "All"

期望结果:

  -Name "diSPARE00" -SignalType "DI" -Device "SIM_BOARD" -DeviceMap "0"

  -Name "doMotOnState" -SignalType "DO" -Device "DP_BOARD" -DeviceMap "32"\
  -Access "System"

  -Name "doService" -SignalType "DO" -Device "DP_BOARD" -DeviceMap "43" -Access "All"

非常感谢你的建议


Tags: nameboardaccessosdevicetypeunitcfg
2条回答

以下是您的方法:

  1. s.split(' ')分割文本以获得数组arr
  2. 迭代数组以查找等于“-Phsig”的元素
  3. 将下一个元素转换为整数并减去1
  4. w = '"' + w + '"'加引号
  5. 使用" ".join(arr)获取文本。你知道吗

您可以将文本分成几行,并在每行中查找'-DeviceMap',然后将其后的数字替换为递减为1并用"包围的数字

s = """\
  -Name "diSPARE00" -Type "DI" -Unit "SIM_BOARD" -Phsig 1

  -Name "doMotOnState" -Type "DO" -Unit "DP_BOARD" -Phsig 33\
  -Access "System"

  -Name "doService" -Type "DO" -Unit "DP_BOARD" -Phsig 44 -Access "All"\
"""

s = s.replace('-Unit', '-Device')
s = s.replace('-Type', '-SignalType')
s = s.replace('-Phsig', '-DeviceMap')

s = s.splitlines()
new_s = []

for line in s:
    line = line.split(' ')
    if '-DeviceMap' in line:
        line[line.index('-DeviceMap')+1] = '"{}"'.format(int(line[line.index('-DeviceMap')+1]) - 1)
    new_s.append(' '.join(line))

s = '\n'.join(new_s)
print(s)

输出:

  -Name "diSPARE00" -SignalType "DI" -Device "SIM_BOARD" -DeviceMap "0"

  -Name "doMotOnState" -SignalType "DO" -Device "DP_BOARD" -DeviceMap "32"  -Access "System"

  -Name "doService" -SignalType "DO" -Device "DP_BOARD" -DeviceMap "43" -Access "All"

如果单词中“Phsig”后面可能有除小数以外的其他字符,您可以将其替换为零,如下所示:

'33\\'.replace('\\', '') # -> '33'

因此,在最后的代码中,我们将把引发错误的行更改为:

        line[line.index('-DeviceMap')+1] = '"{}"'.format(int(line[line.index('-DeviceMap')+1].replace('\\', '')) - 1)

相关问题 更多 >