Как отобразить все элементы в текстовом файле в списке в Python Tkinter? - PullRequest
0 голосов
/ 21 мая 2019

Я хочу создать список для перечисления имен учетных записей, которые находятся в текстовом файле users.conf.

Как я могу перечислить его для выбора учетной записи для удаления?

  • users.conf:
  • 56185 User-Password == "56185"
  • 40317 User-Password == "40317"
  • 11581 User-Password == "11581"
  • 38467 User-Password == "38467"
  • 50071 User-Password == "50071"
  • 81045 Пароль пользователя == "81045"

  • Предпочтительный вывод в списке:

  • 56185
  • 40317
  • 11581
  • 38467
  • 50071
  • 81045

    def deleteuser():
       with open('C:/FreeRADIUS.net/etc/raddb/users.conf', "r") as fh:
        lines = fh.readlines()
       with open('C:/FreeRADIUS.net/etc/raddb/users.conf', "w") as fh:
        for line in lines:                  
            if deleteuserentry.get() in line and  deleteuserpwd.get() == "Pa$$w0rd123" :
               tkMessageBox.showinfo("success", "Account Deleted")
               end()
    
    
        deleteteuser = ttk.Label(page1, text="Delete User").grid(column=0, row=6, sticky='W')
        deleteusername = ttk.Label(page1, text="Enter current user's username:").grid(column=0, row=7, sticky='W')
        deleteuserentry = ttk.Listbox(page1, selectmode = BROWSE)
        deleteuserentry.grid(row=7, column=1, columnspan=2)
        for lines in ('C:/FreeRADIUS.net/etc/raddb/users.conf', "r"):
            lb.insert(END,line)
        deleteuserpassword = ttk.Label(page1, text="Enter Administrator's password:").grid(column=0, row=8, sticky='W')
        deleteuserpwd = ttk.Entry(page1, show='*')
        deleteuserpwd.grid(row=8, column=1, columnspan=2)
        deleteuserconfirm = Button(page1, text='Delete this User', borderwidth=2, command= deleteuser)
         deleteuserconfirm.grid(row=9, column=0, sticky='W')
        du = Button(page1, text='import file to delete multiple accounts', borderwidth=2, command= du)
        du.grid(row=9, column=2, sticky='E')
    

1 Ответ

0 голосов
/ 21 мая 2019

Вы можете сопоставить строку с помощью регулярного выражения, выбирая идентификатор пользователя в начале и данные строки, заполняя его в список. Когда элемент удаляется из списка, идентификатор пользователя добавляется в другой список. И когда интерфейс закрыт, происходит фактическая операция удаления из файла. Вот структура того, что я имею в виду. Вы можете использовать его в качестве примера - оптимизировать, где это необходимо.

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])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...