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

问题描述

我有一个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] 

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

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

预先感谢

解决方法

保存和检索列表的快速方法是使用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','password1']]
[['username','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",item.split('-')[1].rstrip()]for item in read_list]
print(user_data)
f.close()

` 您可以从此代码中获得一些想法。当然,您可以改善它。

内置的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'})

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...