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

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

如何解决如何在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 包吗?使用这个处理换行符可能会有所帮助:

from fileinput import FileInput


adding_str = [6,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'
            )

当然,就地修改不是必须的,只是一个可以使用的功能。

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