Python 将变量匹配到txt中的行并删除行时出现问题

Python 将变量匹配到txt中的行并删除行时出现问题,python,Python,我在将变量匹配到txt中的行以及删除这些行时遇到问题 我目前正在执行一个酒店客房预订计划,在该计划中,我无法从文本文件中删除预订 以下是文本文件中我的行的格式: 第一个姓名1、电话号码1和电子邮件1链接到输入框 jeff;jeff@gmail.com;123123123;2019-06-09;2019-06-10;Single Room def edit_details(self,controller): f = open("Bookings.txt") li

我在将变量匹配到txt中的行以及删除这些行时遇到问题

我目前正在执行一个酒店客房预订计划,在该计划中,我无法从文本文件中删除预订

以下是文本文件中我的行的格式:

第一个姓名1、电话号码1和电子邮件1链接到输入框

jeff;jeff@gmail.com;123123123;2019-06-09;2019-06-10;Single Room
 def edit_details(self,controller):

        f = open("Bookings.txt")
        lines = f.readlines()
        f.close()
        x = -1
        for i in lines:
            x += 1
            data = lines[x]
            first_name1 = str(controller.editName.get())
            phonenumber1 = str(controller.editPhone.get())
            email1 = str(controller.editEmail.get())

            checkfirst_name, checkemail, checkphone_num, checkclock_in_date, checkclock_out_date, checkroom = map(str, data.split(";"))

            if checkfirst_name.upper() == first_name1.upper() and checkemail.upper() == email1.upper() and checkphone_num == phonenumber1:
                controller.roomName.set(checkfirst_name)
                controller.roomEmail.set(checkemail)
                controller.roomPhone.set(checkphone_num)
                controller.roomCheckin.set(checkclock_in_date)
                controller.roomCheckout.set(checkclock_out_date)
                controller.roomSelect.set(checkroom)

                print(controller.roomName.get())
                print(controller.roomSelect.get())

                controller.show_frame("cancelBooking")
                break

            elif x > len(lines) - int(2):
                messagebox.showerror("Error", "Please Enter Valid Details")
                break   

我让用户输入他们的详细信息以提供变量,但我不知道如何将这些变量与文本文件中的行匹配以删除预订

我是否必须格式化这些变量以匹配行? 这是我尝试过的,但它删除了我文件中的最后一行

line_to_match = ';'.join([controller.roomName.get(),controller.roomEmail.get(),controller.roomPhone.get()])
         print(line_to_match)

         with open("Bookings.txt", "r+") as f:
             line = f.readlines()
             f.seek(0)
             for i in line:
                 if i.startswith(line_to_match):
                    f.write(i)
             f.truncate()

我在这里添加了一个伪代码。您可以使用
连接变量并验证行是否以这些细节开始,如下所示

first_name1, phonenumber1, email1 = 'jeff', 'jeff@gmail.com', '123123123'

line_to_match = ';'.join([first_name1, email1, phonenumber1])

for i in line:
    ...
    if i.startswith(line_to_match):
        # Add your removal code here
    ...

我在这里添加了一个伪代码。您可以使用
连接变量并验证行是否以这些细节开始,如下所示

first_name1, phonenumber1, email1 = 'jeff', 'jeff@gmail.com', '123123123'

line_to_match = ';'.join([first_name1, email1, phonenumber1])

for i in line:
    ...
    if i.startswith(line_to_match):
        # Add your removal code here
    ...

为什么要存储在文件中?数据库怎么样?至少一个文件数据库?这是我的学校项目,我已经有用户以这种格式进行预订,这是我计划的最后一个阶段。您还可以添加包含这些详细信息的变量的代码吗?为什么要存储在文件中?数据库怎么样?至少一个文件数据库?这是我学校的项目,我已经有用户将预订设置为这种格式,这是我程序的最后一个阶段。您还可以添加包含这些详细信息的变量的代码吗?我是否必须读取文件才能使用行匹配,然后使用写入删除?@Jefferyfromkmart是。不要使用
读取行
。直接迭代文件对象<代码>对于打开的行('file_name.txt'):
。我必须读取文件才能使用行匹配,然后使用write删除吗?@Jefferyfromkmart是。不要使用
读取行
。直接迭代文件对象<代码>对于打开的行('file_name.txt'):