簡體   English   中英

如何在python中幾個文件的某些行的末尾添加一個字符串

[英]how to add a string at the end of some lines of several files in python

我有幾個.msh格式的文件,想使用 python 在其中的某些行的末尾添加一個字符串。 我的文件名是mod0.mshmod1.mshmod2.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM