将列表写入文件以供日后重用
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'})
我有一个 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'})