我是Python的初学者,并尝试使用循环和pickle
从列表中的文件中编写用户名和密码。
但是,我收到错误:
NameError: name 'listusername' is not defined
以下代码行:
listusername.write("%s\n" % i)
以下是我的其余代码:
userName = input('Please enter a username:\n')
password1 = input('Please enter a password:\n')
user_names=[]
passwords=[]
user_names.append(userName)
passwords.append(password1)
for i in user_names:
listusername.write("%s\n" % i)
for i in user_names:
listusername.read("%s\n" % i)
for i in passwords:
listpassword.write("%s\n" % i)
for i in passwords:
listpassword.read("%s\n" % i)
所有答案和建议将不胜感激。
答案 0 :(得分:2)
在你的代码中
for i in user_names:
listusername.write("%s\n" % i)
Python不知道listusername是什么。这就是
错误的原因NameError:未定义名称“listusername”
要解决此问题,您可以在使用之前先设置listusername,例如
listusername = open('output.txt', 'w')
for i in user_names:
listusername.write("%s\n" % i)
然而,这一步是完全没必要的 - 因为你的问题涉及pickle模块 - 文档附带example。这是您的问题的解决方案:
userName = input('Please enter a username:\n')
password1 = input('Please enter a password:\n')
user_names=[]
passwords=[]
user_names.append(userName)
passwords.append(password1)
import pickle
with open('user_names.txt', 'w') as f:
pickle.dump(f, user_names)
with open('passwords.txt', 'w') as f:
pickle.dump(f, passwords)
答案 1 :(得分:1)
从您的代码中可以看出,您期望listusername
成为一个文件对象,它允许您编写字符串,然后阅读,呃,某些东西。我不明白listusername.read("%s\n" % i)
,我怀疑你也不是。
看,我明白了。你很困惑。你是一名新手程序员。我来帮帮你吧。
如果你运行这个Python脚本,它会询问你一些帐户信息,腌制它,然后把它写到一个名为accounts.pickled
的文件中。
import pickle
accounts = []
# Let's collect some account information.
username = input('Please enter a username: ')
password = input('Please enter a password: ')
account = (username, password) # This tuple represents an account.
accounts.append(account) # Add it to the list of accounts.
# Write the pickled accounts to a file.
with open('accounts.pickled', 'wb') as out_file:
pickle.dump(accounts, out_file)
请注意,我们正在编写一个名为accounts
的数组,该数组只包含一个帐户。我将把它留作练习,让你弄清楚如何收集有关多个账户的信息。
稍后,当您想要从文件中读取帐户时,可以运行以下脚本。
import pickle
# Unpickle the accounts.
with open('accounts.pickled', 'rb') as in_file:
accounts = pickle.load(in_file)
# Display the accounts one at a time.
for account in accounts:
username, password = account
print('username: %s, password: %s' % (username, password))