如何根据选定的名称更改文件中的特定行?

2024-06-16 19:03:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

Tags: 文件名称内容数字else号码dagjon
3条回答

给你,这个就行了。你知道吗

正如Mateen Ulhaq在评论中提到的那样,如果不重写整个文件,那么就没有合理的方法来实现这一点,所以这个解决方案只包含这一点。但是,只有在找到带有初始文件的choosen名称时,它才会重写文件。你知道吗

另外,当输入的数字不是一个真正的数字时,这也不能处理这种情况,所以如果有人输入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.')

正如一些评论所建议的,您不能访问文本文件的特定行。到目前为止,您尝试过的方法确实会替换字符串中的文本(如您所愿),但是您正在修改的字符串不再有任何指向文件的链接。你知道吗

您必须读取内存中的孔文件。进行所需的更改,然后将所有内容写回文件。你知道吗

lines = []
with open("MyFile.txt", 'r')as MyFile:
    for line in MyFile.readlines():
        lines.append(line)

for index, line in enumerate(lines):
    if line.startswith("Kari"):
        lines[index] = "Kari 1881\n"

with open("MyFile.txt", "w+") as MyFile:
    MyFile.writelines(lines)

这个例子适用于这个特定的情况。我将把推广它的挑战留给你。你知道吗

看来一本字典最适合这种情况。我想试试这个:

names_dictionary = dict()
f = open("hei.txt", "r")
for name, number in zip(f, f):
    names_dictionary[name] = number

只需更新任何数字:

names_dictionary[name] = any_number

相关问题 更多 >