使用python从txt文件中删除特定值

使用python从txt文件中删除特定值,python,file,Python,File,用户输入数据(名字、姓氏、电话号码和他们想要保存数据的电话簿名称),脚本将其保存到.txt文件中。然而,当我试图删除用户输入的特定值时,它并不能正常工作 1) 它不会删除.txt文件中的一个条目。程序将一直挂起,直到我执行ctrl+c 2) 我用三个条目运行了测试,它删除了除一个条目之外的所有条目 3) 函数在.txt文件中找不到first_name和last_name值,并抛出错误。它只在.txt文件中找到第一个条目,而不是第三个条目 任何反馈都会有帮助。谢谢 def delete(first

用户输入数据(名字、姓氏、电话号码和他们想要保存数据的电话簿名称),脚本将其保存到.txt文件中。然而,当我试图删除用户输入的特定值时,它并不能正常工作

1) 它不会删除.txt文件中的一个条目。程序将一直挂起,直到我执行ctrl+c

2) 我用三个条目运行了测试,它删除了除一个条目之外的所有条目

3) 函数在.txt文件中找不到first_name和last_name值,并抛出错误。它只在.txt文件中找到第一个条目,而不是第三个条目

任何反馈都会有帮助。谢谢

def delete(first_name, last_name, phonebook_name):
    filename = '%s.txt' % phonebook_name

if not os.path.isfile(filename):
    print('phonebook.py: error: phonebook doesn\'t exists')
    quit()

with open(filename, 'r+') as f:
    for line in f:
        entry_first_name, entry_last_name, entry_number = line.strip().split('\t')
        if entry_first_name == first_name and entry_last_name == last_name:
            lines = f.readlines()
            f.seek(0)
            for data in lines:
                if data != entry_first_name and entry_last_name:
                    f.write(data)
                    f.truncate()
                    print(print('phonebook.py: contact deleted'))
                    quit()
        else:
            print('phonebook.py: error: contact doesn\'t exist.')

听起来你应该使用
fileinput
inline=True
——这将大大简化你的代码。我想你应该在
lines=f.readlines()之前使用
f.seek(0)
。此外,您还将数据
(本质上是一行)与条目(名字)(永远不应该为真)进行比较
bool(entry\u last\u name)
将始终为真……`您的程序从未完成的原因可能是您在已循环的同一文件上使用了
f.seek(0)
,从而在每次迭代中有效地重置了循环。