Вы можете сопоставить строку с помощью регулярного выражения, выбирая идентификатор пользователя в начале и данные строки, заполняя его в список. Когда элемент удаляется из списка, идентификатор пользователя добавляется в другой список. И когда интерфейс закрыт, происходит фактическая операция удаления из файла. Вот структура того, что я имею в виду. Вы можете использовать его в качестве примера - оптимизировать, где это необходимо.
import re
import os
from tkinter import *
pattern = re.compile(r'^(?P<user_id>\d+)\s')
data_file = 'users.conf'
res_file = 'result.conf' # This could alse be the same file from which the users are read
try:
os.remove(res_file)
except FileNotFoundError:
pass
# Read users
with open(data_file) as f:
lines = []
for l in f.readlines():
match = pattern.match(l)
if match is not None:
user_id = match.group('user_id')
else:
user_id = ''
lines.append((user_id, l))
lines_to_remove = []
def delete_record(lb):
user_id = lb.get(ANCHOR)
lines_to_remove.append(user_id)
lb.delete(ANCHOR)
# Display GUI
top = Tk()
lb = Listbox(top)
b = Button(top, text="Delete",
command=lambda lb=lb: delete_record(lb))
for line in lines:
if line[1]:
lb.insert(END, line[0])
lb.pack()
b.pack()
top.mainloop()
# Delete lines
valid_lines = filter(lambda l: l[0] not in lines_to_remove, lines)
with open(res_file, 'w+') as f:
f.writelines([l[1] for l in valid_lines])