将列表写入文件以供日后重用

Writing list to file for reuse at a later date

我有一个 python 文件需要用户名和密码进行身份验证。这些用户名和密码详细信息以

格式保存到文件中
    userlist = [[username, password], [username1, password1]]

等等。这行得通,但是当我将列表写入文件时,我会将其写成这样的字符串:

    name_write_file = open("names.txt", "w")
    name_write_file.writelines(str(name_list))
    print("user data successfully saved to file")
    name_write_file.close()

稍后在代码中,我需要识别用户名以启动登录序列,我使用

执行此操作
    userlist[0] 

通常这应该是 return“用户名”,但现在是 returns“[”(保存到文件的字符串中的第一个括号)

有什么办法可以解决这个问题?

提前致谢

保存和检索列表的一种快速方法是使用 eval:

name_list = [['username', 'password'], ['username1', 'password1']]

name_write_file = open("names.txt", "w")
name_write_file.writelines(str(name_list))
print("user data successfully saved to file")
name_write_file.close()

with open("names.txt") as f:
   name_list2 = eval(f.read())

print(name_list)
print(name_list2)
print(name_list2[0])

输出

[['username', 'password'], ['username1', 'password1']]
[['username', 'password'], ['username1', 'password1']]
['username', 'password']

file.writelines(序列) 如您所知,它将项目按顺序保存为文件中的字符串。 因此,要解决您的问题,您需要编写如下一些棘手的代码。 `

userlist = ["user1-password1\n", "user2-password2"]
# save user data
f = open("test.txt", "w+")
f.writelines(userlist)
f.close()
# get user data
f = open("test.txt", "r+")
read_list = f.readlines()
user_data = [[item.split('-')[0], item.split('-')[1].rstrip()]for item in read_list]
print(user_data)
f.close()

` 你可以从这段代码中得到一些想法。当然,你可以改进它。

file.writelines(序列) 如您所知,它将项目按顺序保存为文件中的字符串。 因此,要解决您的问题,您需要编写如下一些棘手的代码。 `

userlist = ["user1-password1\n", "user2-password2"]
# save user data
f = open("test.txt", "w+")
f.writelines(userlist)
f.close()
# get user data
f = open("test.txt", "r+")
read_list = f.readlines()
user_data = [[item.split('-')[0], item.split('-')[1].rstrip()]for item in read_list]
print(user_data)
f.close()

` 你可以从这段代码中得到一些想法。当然,你可以改进它。

built-in eval() 函数也是解决问题的好方法。

CSV 文件是保存数据的更好格式。 你可以这样写你的数据:

with open("my_user_pwd.csv", 'w', newline='') as csvfile:
    fieldnames = ['username', 'password']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writerow({'Username1': 'Password1'})
    writer.writerow({'Username2': 'Password2'})