如何将列表写入 Python 中的文件?
How do you write a list to a file in Python?
我是 Python 和 运行 的初学者,遇到了一个错误。我正在尝试创建一个程序,该程序将采用用户创建的用户名和密码,将它们写入列表并将这些列表写入文件。这是我的一些代码:
这是用户创建用户名和密码的部分。
userName=input('Please enter a username')
password=input('Please enter a password')
password2=input('Please re-enter your password')
if password==password2:
print('Your passwords match.')
while password!=password2:
password2=input('Sorry. Your passwords did not match. Please try again')
if password==password2:
print('Your passwords match')
我的代码在此之前运行良好,但出现错误:
invalid file: <_io.TextIOWrapper name='usernameList.txt' mode='wt' encoding='cp1252'>.
我不确定为什么会返回此错误。
if password==password2:
usernames=[]
usernameFile=open('usernameList.txt', 'wt')
with open(usernameFile, 'wb') as f:
pickle.dump(usernames,f)
userNames.append(userName)
usernameFile.close()
passwords=[]
passwordFile=open('passwordList.txt', 'wt')
with open(passwordFile, 'wb') as f:
pickle.dump(passwords,f)
passwords.append(password)
passwordFile.close()
有什么方法可以修复这个错误,或者有其他方法可以将列表写入文件吗?
谢谢
usernameFile=open('usernameList.txt', 'wt')
with open(usernameFile, 'wb') as f:
第二行usernameFile
是一个文件对象。打开的第一个参数 必须 是一个文件名(io.open()
也支持文件描述符数字作为整数)。 open()
试图将其参数强制转换为字符串。
在您的情况下,这会导致
str(usernameFile) == '<_io.TextIOWrapper name='usernameList.txt' mode='wt' encoding='cp1252'>'
这不是一个有效的文件名。
替换为
with open('usernameList.txt', 'wt') as f:
并完全摆脱 usernameFile
。
你的想法是对的,但是有很多问题。当用户密码不匹配时,通常会提示您再次输入。
with
块用于打开和关闭文件,因此无需在末尾添加 close
。
下面的脚本说明了我的意思,然后您将有两个包含 Python list
的文件。所以尝试查看它没有多大意义,您现在需要将相应的阅读部分写入您的代码。
import pickle
userName = input('Please enter a username: ')
while True:
password1 = input('Please enter a password: ')
password2 = input('Please re-enter your password: ')
if password1 == password2:
print('Your passwords match.')
break
else:
print('Sorry. Your passwords did not match. Please try again')
user_names = []
user_names.append(userName)
with open('usernameList.txt', 'wb') as f_username:
pickle.dump(user_names, f_username)
passwords = []
passwords.append(password1)
with open('passwordList.txt', 'wb') as f_password:
pickle.dump(passwords, f_password)
我是 Python 和 运行 的初学者,遇到了一个错误。我正在尝试创建一个程序,该程序将采用用户创建的用户名和密码,将它们写入列表并将这些列表写入文件。这是我的一些代码: 这是用户创建用户名和密码的部分。
userName=input('Please enter a username')
password=input('Please enter a password')
password2=input('Please re-enter your password')
if password==password2:
print('Your passwords match.')
while password!=password2:
password2=input('Sorry. Your passwords did not match. Please try again')
if password==password2:
print('Your passwords match')
我的代码在此之前运行良好,但出现错误:
invalid file: <_io.TextIOWrapper name='usernameList.txt' mode='wt' encoding='cp1252'>.
我不确定为什么会返回此错误。
if password==password2:
usernames=[]
usernameFile=open('usernameList.txt', 'wt')
with open(usernameFile, 'wb') as f:
pickle.dump(usernames,f)
userNames.append(userName)
usernameFile.close()
passwords=[]
passwordFile=open('passwordList.txt', 'wt')
with open(passwordFile, 'wb') as f:
pickle.dump(passwords,f)
passwords.append(password)
passwordFile.close()
有什么方法可以修复这个错误,或者有其他方法可以将列表写入文件吗? 谢谢
usernameFile=open('usernameList.txt', 'wt')
with open(usernameFile, 'wb') as f:
第二行usernameFile
是一个文件对象。打开的第一个参数 必须 是一个文件名(io.open()
也支持文件描述符数字作为整数)。 open()
试图将其参数强制转换为字符串。
在您的情况下,这会导致
str(usernameFile) == '<_io.TextIOWrapper name='usernameList.txt' mode='wt' encoding='cp1252'>'
这不是一个有效的文件名。
替换为
with open('usernameList.txt', 'wt') as f:
并完全摆脱 usernameFile
。
你的想法是对的,但是有很多问题。当用户密码不匹配时,通常会提示您再次输入。
with
块用于打开和关闭文件,因此无需在末尾添加 close
。
下面的脚本说明了我的意思,然后您将有两个包含 Python list
的文件。所以尝试查看它没有多大意义,您现在需要将相应的阅读部分写入您的代码。
import pickle
userName = input('Please enter a username: ')
while True:
password1 = input('Please enter a password: ')
password2 = input('Please re-enter your password: ')
if password1 == password2:
print('Your passwords match.')
break
else:
print('Sorry. Your passwords did not match. Please try again')
user_names = []
user_names.append(userName)
with open('usernameList.txt', 'wb') as f_username:
pickle.dump(user_names, f_username)
passwords = []
passwords.append(password1)
with open('passwordList.txt', 'wb') as f_password:
pickle.dump(passwords, f_password)