匹配变量难以在txt中插入行,并删除了行

时间:2019-06-09 13:19:20

标签: python

我无法将变量与txt中的行匹配,并删除行。

我目前正在执行一个酒店房间预订程序,在该程序中我无法从文本文件中删除预订。

这是我的文本文件中的行的格式:

名字,电话号码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()

1 个答案:

答案 0 :(得分:0)

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

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
    ...