我有一个用户名密码登录系统,想添加删除用户功能。用户名存储在文本文件的偶数行(包括零)和密码在奇数行上。有没有办法只将偶数行添加到要通过curselection选择的列表框中删除,因为显示密码将与该点相对。我目前在列表框中显示文本文件的所有内容,但是只想显示用户名。要从列表框中删除选定的行后删除行,我已将列表框的内容复制到新的文本文件中。在选择了要删除的用户名后,还有办法删除相应的密码吗?
def DelUser():
global rootDU
global listbox
rootDU = Tk()
rootDU.title('Delete user')
users = open(creds, 'r')
mylist = users.readlines()
users.close()
listbox = Listbox(rootDU, width=50, height=6)
listbox.grid(row=0, column=0)
yscroll = Scrollbar(command=listbox.yview, orient=VERTICAL)
yscroll.grid(row=0, column=1, sticky=N + S)
listbox.configure(yscrollcommand=yscroll.set)
enter1 = Label(rootDU, text='Click on the user to delete', width=50)
enter1.grid(row=1, column=0)
for item in mylist:
listbox.insert(END, item)
delButton = Button(rootDU, text='Delete', command=RemoveUser)
delButton.grid(columnspan=2, sticky=W)
delButton.grid(row=2, column=0)
def RemoveUser():
global listbox
try:
index = listbox.curselection()[0]
listbox.delete(index)
os.remove(creds)
newfile = 'tempfile.txt'
with open(newfile, 'w') as f:
f.write(''.join(listbox.get(0, END)))
f.close()
except IndexError:
pass
答案 0 :(得分:1)
只需在列表框中每隔一行添加一次:
for item in mylist[::2]:
listbox.insert(END, item)
从第0行开始,::2
切片每隔一行选择一次。有关详细信息,请参阅Explain Python's slice notation。
然后,您仍然必须重新读取该文件才能找到相应的密码,因为您不会单独存储该信息。您确实希望存储从用户名到密码的映射(单独地,作为您在DelUser
和RemoveUser
之间共享的信息),以便您可以使用剩余的用户和密码轻松地重写用户文件。
您还可以考虑为您的文件使用不同的格式;在同一行上编写用户名和密码 ,但在它们之间加上分隔符,可以更容易地处理数据。