运行代码并到达csv文件部分时出现此错误: 第96行,在字段名中 self._fieldnames = next(self.reader) io.UnsupportedOperation:阅读
我的代码:
import csv
username = ""
global enteruser
global username
def user():
age = input("What is your age:")
year = input("What is your year group?")
name = input("What is your name?")
username = name+age+year
return username
def username_validator():
with open('usernames.csv', 'ab') as file:
reader = csv.DictReader(file)
for row in reader:
print(row)
if enteruser or username == row["usernames"]: # if the username shall be on column 3 (-> index 2)
print ("is in file")
with open("user1.csv","ab") as quiz:
quizreader = csv.DictReader(quiz,delimiter=",")
for row in quizreader:
print(row["name"])
else:
print("doesnt work")
isuser = input("Do you have a username?")
if isuser == ("yes" or "Yes"):
enteruser = input("Enter username:")
username_validator()
elif isuser == ("no" or "No"):
user()
else:
None
print(username)
答案 0 :(得分:0)
不确定这是否是导致您出现问题的原因,但请务必在此处小心使用全局变量。由于您的代码现在已经存在,它将始终在最后一行打印一个空字符串,因为您永远不会全局更新username
。根据经验,尽可能避免使用全局变量,而是将这些变量作为参数传递给函数。
除非您明确告诉您的函数使用全局变量,否则它将默认为创建局部变量。所以这里:
def user():
age = input("What is your age:")
year = input("What is your year group?")
name = input("What is your name?")
username = name+age+year
return username
我们实际上没有对全局变量username
做任何事情,而是简单地在返回的函数中创建一个新的局部变量。要更新全局变量,请在函数中将其定义为全局变量(如下所示):
def user():
global username
age = input("What is your age:")
year = input("What is your year group?")
name = input("What is your name?")
username = name+age+year
或者,保持函数不变,只需在调用user()
函数时更新变量,如下所示:
elif isuser == ("no" or "No"):
username=user()
else:
None
print(username)
编辑:仔细查看你的if语句,阅读OP中的评论中发布的链接。
答案 1 :(得分:0)
您的错误是由文件打开/关闭引起的。
您正试图从未打开的文件中读取。
从内置函数open function开始的python中有一个声明如下:
open(name[, mode[, buffering]])
这里你可以使用的参数是r:reading,w:writing,a:追加r +:读/写,w +:读/写,以及a +:追加/写模式。对于这些,二进制标签可以像r + b
一样添加到最后对于您的代码,您需要更改
中的开放行 with open("user1.csv","ab") as quiz:
到
with open('user1.csv', 'a+b') as quiz:
所以你真正需要的是+允许追加和阅读