我正在尝试使用Pandas构建一个模拟数据库来处理新用户名、盐和哈希值的输入。首先,我创建了一个空白字典。
users ={}
然后获取用户的输入并将其添加回字典。
def add_user():
username = input("Create a Username: ") # The users username
password1 = input("Create a new password: ")
password2 = input("Re-enter your password: ") # The users password
if password1 == password2:
salt = os.urandom(32) # A new salt for this user
key = hashlib.pbkdf2_hmac('sha256', password1.encode('utf-8'), salt, 100000)
users[username] = { # Store the salt and key
'salt': salt,
'key': key
}
print(users)
df = pd.DataFrame.from_dict(users)
df.to_excel("User_Database.xlsx", index = False)
else:
print("Your passwords do not match, try again.")
add_user()
如果我只打印"user"字典,它出来很好。我:
{'Rocketman': {'salt': b';x97xe8xcc6Axbfxe4Zx9exa7xf9+xbasxa3x17x01$Z1xfbxa2Gx03uxd2xa1xd5x8e:0', 'key': b'xb6xdecxa0tx10x02jx12O^xa2wxbf)bzx10vkxe4xe6xa5opx95x06xc6<xe9x8bx8b'}}
如果我多次运行这个函数,我得到:
{'rocketman 1': {'salt': b'Xx026Nxb2Pxb3xd1mxb1xc1xf0xccx9bx88xb4xf8x95W~xd1xd7x0cx88xedxc6mdc|xc7xf9', 'key': b'xfcxa2x0c=xadax81xf0x05x1d?x95x14*xf4_xf2xb2Rx19:x94cxd6xa5Cxdc:B}xf0xc3'}, 'rocket man 2': {'salt': b't/xabx01lxa1xe0xbaxb6xa6xc6xd4x01x1d/xf2x86hxf4x-=rx97rxe6X|xa3x04bxc9', 'key': b'xdbxf4yx03#x9exff*<xbcYitxb9xa78x0fFxfcxc0xe6x9e&xf0xx8cxd3xecx0bx01wx9a'}}
但是,我想阅读这个excel电子表格,将其转换为字典,并在创建更多用户时添加到其中。
users = pd.read_excel('User_Database.xlsx')
users = users.to_dict()
users
然而,当我阅读电子表格并将其转换为字典时,问题就出现了。格式改为:
{'Unnamed: 0': {0: 'salt', 1: 'key'},
'rocketman 1': {0: "b'X\x026N\xb2P\xb3\xd1m\xb1\xc1\xf0\xcc\x9b\x88\xb4\xf8\x95W~\xd1\xd7\x0c\x88\xed\xc6mdc|\xc7\xf9'",
1: "b'\xfc\xa2\x0c=\xada\x81\xf0\x05\x1d?\x95\x14*\xf4_\xf2\xb2R\x19:\x94c\xd6\xa5C\xdc:B}\xf0\xc3'"},
'rocket man 2': {0: "b't/\xab\x01l\xa1\xe0\xba\xb6\xa6\xc6\xd4\x01\x1d/\xf2\x86h\xf4x-=r\x97\r\xe6X|\xa3\x04b\xc9'",
1: "b'\xdb\xf4y\x03#\x9e\xff*<\xbcYi\t\xb9\xa78\x0fF\xfc\xc0\xe6\x9e&\xf0x\x8c\xd3\xec\x0b\x01w\x9a'"}}
或者如果我只有一个用户名,保存它,读取文件,然后再试一次,Pandas添加了正确的列,但随后将新的盐和散列放在电子表格的较低位置。
Name 1 | Name 2
b'X\ | NaN
b'X\ | NaN
NaN | b'X\
NaN | b'X\
我已经试过删除索引到,但这并不能解决问题。我应该重新整理一下我的字典吗?理想情况下,我希望表单看起来像这样:
Data_Type | Name 1
Salt | b'X\
Hash | b'X\
您可能需要一个格式为:
的字典{
'users': ['rocketman', 'bucketman'],
'salt': ['...123123....', '....245345345...'],
'hash': ['...abcdf....', '....hijklm......']
}
然后,将其传递给pandas数据框架,这将以列的形式写入XLSX文件,而不是当前的格式—pandas数据框架使用列数据!