我正在开发一个应该能够处理基本库任务的程序。我有一个
类方法的问题,该方法旨在为用户提供从图书馆中删除某本书的可能性。书籍清单包含在外部文字档案中,格式如下(作者,书名):
Vibeke Olsson, Molnfri bombnatt
Axel Munthe, Boken om San Michele
我正在使用的方法如下所示:
def removeBook(self):
removal_of_book = input("What's the book's titel, author you'd like to remove?: ")
with open("books1.txt" , "r+") as li:
new_li = li.readlines()
li.seek(0)
for line in new_li:
if removal_of_book not in line:
li.write(line)
li.truncate()
print(removal_of_book + " is removed from the system!")
此方法的问题在于,包含remove_of_book的每一行都将被删除(或未在文件上重写)。我知道该方法远非最佳方法,应该刮掉它,但我完全找不到寻找替代方法。
有谁对这个问题有更好的解决方案?
最佳答案
您可以使用列表推导方式创建要即时写入新文件的行,然后再将其写入新文件(使用相同的文件名覆盖原始文件):
def removeBook(self):
to_remove = input("What's the book's title, author you'd like to remove?: ")
with open("books1.txt" , "r+") as li:
new_li = [line for line in li.readlines() if to_remove not in line]
new_file = open('books1.txt', 'w'); new_file.write(new_li); new_file.close()
print(to_remove + " is removed from the system!")
请注意,字符串成员资格检查区分大小写,因此您希望用户与原始文件中的大小写完全匹配。您可能会考虑在使用
lower()
执行检查之前将字符串转换为小写形式。关于python - 删除外部文本文件中的某些行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53053847/