微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

$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)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。