首页 > 解决方案 > 如何根据选择的名称更改文件中的特定行?

问题描述

我有一个文本文件,其中列出了数字和名称。每个数字都属于一个特定的名称,并且它们属于同一行。文件的内容,如下所示:

Kari 98654321
Liv 99776655
Ola 99112233
Anne 98554455
Jens 99776612
Per 97888776
Else 99455443
Jon 98122134
Dag 99655732
Siv 98787896

(注意*名称和数字由新行分隔,出于某种原因,它只是将所有内容粘贴到此处)假设我选择“Else”作为所选名称,我希望能够更新文件并更改被选中的人的号码和一个新的选中号码

我在 python 方面没有那么有经验,所以我在寻找解决这个问题的方法时非常费劲,但是我尝试使用.replace(),.readline()和其他函数来用其他东西替换内容,但我只是继续替换整个文件

import os
def endreNummer():
    with open("hei.txt", "a+"):

endreNummer()

如果我选择“Kari”作为名称,选择“1881”作为新号码,则预期的输出。输出如下所示:

Kari 1881
Liv 99776655
Ola 99112233
Anne 98554455
Jens 99776612
Per 97888776
Else 99455443
Jon 98122134
Dag 99655732
Siv 98787896

标签: python

解决方案


给你,这应该可以。

正如 Mateen Ulhaq 在评论中提到的那样,如果不重写整个文件,就没有合理的方法可以做到这一点,所以这个解决方案就包括了这一点。但是,仅当在初始文件中找到所选名称时,它才会重写文件。

这也不能处理输入数字不是真正数字的情况,因此如果有人输入notnumber123选择的数字,它仍然会被写入文件。

filepath = 'hei.txt'

choosen_name = input('Choose name: ')
choosen_num = input('Choose number: ')

with open(filepath) as f:
    content = f.readlines()

file_changed = False
new_content = []
for line in content:
    if choosen_name in line:
        new_content.append('{} {}\n'.format(choosen_name, choosen_num))
        file_changed = True
    else:
        new_content.append(line)

if file_changed:
    with open(filepath,'w') as f:
        for line in new_content:
            f.write('{}'.format(line))
else:
    print('Choosen name not found.')

推荐阅读