#python #string #list #writetofile
#python #строка #Список #запись в файл
Вопрос:
У меня есть файл 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]
Обычно это должно возвращать «username», но вместо этого оно теперь возвращает «[» (первая скобка из строки, сохраненной в файле)
Есть способ это исправить?
Заранее спасибо
Ответ №1:
Быстрый способ сохранить и извлечь список — использовать 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']
Ответ №2:
файл.линии записи (последовательность) Как вы знаете, он сохраняет элемент последовательно в виде строки в файле. Итак, чтобы решить вашу проблему, вам нужно написать какой-нибудь сложный код, подобный следующему. `
userlist = ["user1-password1n", "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()
`
У вас могут возникнуть некоторые идеи из этого кода. Конечно, вы можете улучшить его.
Комментарии:
1. спасибо, но я думаю, что буду использовать приведенный выше ответ, поскольку в нем меньше изменений, необходимых для моего кода.
Ответ №3:
файл.линии записи (последовательность) Как вы знаете, он сохраняет элемент последовательно в виде строки в файле. Итак, чтобы решить вашу проблему, вам нужно написать какой-нибудь сложный код, подобный следующему. `
userlist = ["user1-password1n", "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()
`
У вас могут возникнуть некоторые идеи из этого кода. Конечно, вы можете улучшить его.
Встроенная функция eval() также является хорошим подходом для вашего решения.
Ответ №4:
Файл 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'})