删除外部文本文件中的某些行

时间:2018-10-29 21:08:15

标签: python python-3.x

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

  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!")

此方法的问题在于,包含 removal_of_book 的每一行都将被删除(或未在文件上重写)。我知道该方法远非最佳方法,应该刮掉它,但我完全找不到寻找替代方法的地方。

有人可以更好地解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

您可以创建列表行以使用列表推导功能将其实时写入新文件,然后再将其写入新文件(使用相同的文件名覆盖原始文件):

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()执行检查之前将字符串转换为小写。