我正在开发一个应该能够处理基本库任务的程序。我有一个
类方法的问题,该方法旨在为用户提供从图书馆中删除某本书的可能性。书籍清单包含在外部文字档案中,格式如下(作者,书名):

  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/

10-17 03:10