Запись списка в файл для повторного использования позже

#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'})