如何解决如何使用python将字符串添加到具有某些关键字的行
我有几个文件(命名为 mod0.msh
、mod1.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 举报,一经查实,本站将立刻删除。