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