如何使用 python 将字符串添加到具有某些关键字的行

How to add a string to rows having some keywords using python

我有几个文件(命名为 mod0.mshmod1.msh 等)并想在这些文件的某些行的末尾添加一个字符串 ( lower_dimensional_block) 使用python。目前我给出行数并在末尾添加字符串,但我想使用行中的一些单词而不是数字。这是我文件的一些第一行:

$MeshFormat
2.2 0 8
$EndMeshFormat
$PhysicalNames
13
1 10 "W_1"
1 11 "W_2"
2 8 "fault2"
...

我还有一个列表,其中包含我要添加字符串的行数:

adding_str = [6,7]

这也是我的代码:

from fileinput import FileInput
for idx in range(2):# it means I have two files
    with FileInput(f'mod{idx}.msh', inplace=True, backup='.bak') as in_file:
        for i, line in enumerate(in_file, start=1):
            for j in keywords:
                print(
                    line.rstrip(),
                    end=' lower_dimensional_block\n' if j in line else '\n'
                )

但是,我有一个关键词列表,我想在每一行的末尾添加包含这些关键词之一的字符串:

keywords=['W_1', 'W_2']

我非常感谢在 python 中帮助我做这样的事情。这是我的预期输出:

$MeshFormat
2.2 0 8
$EndMeshFormat
$PhysicalNames
13
1 10 "W_1" lower_dimensional_block
1 11 "W_2" lower_dimensional_block
2 8 "fault2"
...

是否如你所愿?

import fileinput
import re

keywords=['W_1', 'W_2']
KWDS = re.compile(fr'''\d+ \d+ "({'|'.join(keywords)})"'''
files = [f'mod{idx}.msh' for idx in range(2)]

with fileinput.input(files, inplace=True, backup='.bak') as in_file:
    for line in in_file:
        print(f'{line.rstrip()} lower_dimensional_block'
                  if KWDS.match(line) else line.rstrip())
>>> %cat mod0.msh
$MeshFormat
2.2 0 8
$EndMeshFormat
$PhysicalNames
13
1 10 "W_1" lower_dimensional_block
1 11 "W_2" lower_dimensional_block
2 8 "fault2"

>>> %cat mod0.msh.bak
$MeshFormat
2.2 0 8
$EndMeshFormat
$PhysicalNames
13
1 10 "W_1"
1 11 "W_2"
2 8 "fault2"

>>> KWDS
re.compile(r'\d+ \d+ "(W_1|W_2)"', re.UNICODE)