[英]how to add a string at the end of some lines of several files in python
我有幾個.msh
格式的文件,想使用 python 在其中的某些行的末尾添加一個字符串。 我的文件名是mod0.msh
、 mod1.msh
、 mod2.msh
等等。 每個文件都有數千行,但這些是第一行的樣子:
$MeshFormat
2.2 0 8
$EndMeshFormat
$PhysicalNames
13
1 10 "W_1"
1 11 "W_2"
2 8 "fault2"
2 9 "fault1"
2 12 "in"
...
我想在某些行的末尾添加另一個字符串( new_added_string
)。 這些線路是:
adding_str=[6,7,8,9]
我只為兩個文件嘗試了以下代碼,但它沒有給我想要的。 我還想導出與我的原始文件 ( .msh
) 格式相同的修改后的文件:
for idx in range(2) # 2 means I have two files:
with open('changed_{}'.format(idx), 'a') as fout:
with open('mod{}.msh'.format(idx), 'r') as fin:
lines = fin.readline()
for i, line in enumerate (lines):
if i in exp:
fout.write(' new_added_string')
else:
fout.write(line)
最后,將字符串添加到提到的行號后,我的文件將如下所示:
$MeshFormat
2.2 0 8
$EndMeshFormat
$PhysicalNames
13
1 10 "W_1" new_added_string
1 11 "W_2" new_added_string
2 8 "fault2" new_added_string
2 9 "fault1" new_added_string
2 12 "in"
...
我修復了一些錯誤:
for idx in range(2)
缺失:
lines = fin.readline()
應該是readlines
,否則你只閱讀第一行。line+'new_added_string'
,而不是只輸出'new_added_string'
代碼:
adding_str = [i-1 for i in [6,7,8,9]]
for idx in range(2): # 2 means I have two files:
with open('changed_{}.txt'.format(idx), 'a') as fout:
with open('mod{}.msh'.format(idx), 'r') as fin:
lines = fin.readlines()
for i, line in enumerate (lines):
if i in adding_str:
fout.write(line.replace("\n","") + ' new_added_string\n')
else:
fout.write(line)
change_0.txt
文件結果:
$MeshFormat
2.2 0 8
$EndMeshFormat
$PhysicalNames
13
1 10 "W_1" new_added_string
1 11 "W_2" new_added_string
2 8 "fault2" new_added_string
2 9 "fault1" new_added_string
2 12 "in"
您知道用於fileinput
編輯文件的fileinput
包嗎? 使用它並處理換行符可能會有所幫助:
from fileinput import FileInput
adding_str = [6, 7, 8, 9]
for idx in range(2):
with FileInput(f'mod{idx}.msh', inplace=True, backup='.bak') as in_file:
for i, line in enumerate(in_file, start=1):
print(
line.rstrip(),
end=' new_added_string\n' if i in adding_str else '\n'
)
當然,就地修改不是必須的,只是一個可以使用的功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.