如何读写腌制信息

时间:2015-08-30 11:44:49

标签: python list pickle

我是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)

所有答案和建议将不胜感激。

2 个答案:

答案 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))