首页 > 解决方案 > Python删除输入.txt字符串,但最终删除txt文件中的每个字符串

问题描述

我目前正在尝试删除我在 søk 输入中输入的数字,以及随后的 3 个其他字符串,但它最终会删除 txt 文件中的每个字符串。因此,如果我想删除“1”和后面的三个单词,它会删除所有内容。

import os

def slett():
    funnet = False

    søk = input('Søk etter studentnr')
    studentfil = open('student.txt', 'r')
    temp_fil = open('tempfil.txt', 'w')
    
    studentnr = studentfil.readline()

    while studentnr != '':
        fornavn = studentfil.readline().rstrip('\n') 
        etternavn = studentfil.readline().rstrip('\n')
        studie = studentfil.readline().rstrip('\n')
       
        if studentnr == søk:
            temp_fil.write(f'{studentnr}\n')
            temp_fil.write(f'{fornavn}\n')
            temp_fil.write(f'{etternavn}\n')
            temp_fil.write(f'{studie}\n')
        else:
            funnet = True

        studentnr = studentfil.readline()

    studentfil.close()
    temp_fil.close()

    os.remove('student.txt')
    os.rename('tempfil.txt', 'student.txt')

    if funnet:
        print('Filen er oppdatert')
        print('Hva vil du gjøre nå? 1 - Slett på nytt, 2 - tilbake til meny, 3 - Avslutt program')
        velg4 = input('Velg her')
        if velg4 == '1':
            print('Slett på nytt')
            slett()
        if velg4 == '2':
            print('Tilbake til meny')
        if velg4 == '3':
            print('Avslutt')
        else:
            quit

    else:
        print('Studentnr ikke gjenkjent')

slett()

标签: python

解决方案


第一个问题是你没有在.rstrip学号上做 - 只是在其他领域。因此,当您与用户在input语句中输入的内容进行比较时,您最终会比较一个末尾带有换行符的值与一个末尾没有换行符的值。在进行比较之前去掉换行符:

studentnr = studentfil.readline().rstrip()

然后,当您决定要保留哪些条目时,您当前的比较包括那些匹配的条目 - 即,您从旧文件移动到新文件的唯一条目是匹配的条目。由于您要实现的是删除操作,因此只有那些不匹配的才应移动到新文件中(即与您现在所做的相反):

代替:

if studentnr == søk:

.. 你要:

if studentnr != søk:

我的最后建议是删除变量的挪威名称并使用英文术语;其他人也会更容易提供帮助,并且可能会在您未来的职业生涯中被需要。


推荐阅读