使用pandas读取CSV实现Python登录表单触发AttributeError如何解决
错误原因
报错的核心原因是CSV分隔符与pandas默认读取规则不匹配:
- pandas
read_csv默认用逗号,做列分隔符,但你提供的CSV用的是分号;,读取后所有列会被合并成一个列,自然找不到brugernavn这个列属性,就报了这个错。 - 还有两个小问题:
read_csv返回的本身就是DataFrame,不需要再套pd.DataFrame()转换;else下面的print缩进不对,运行会报语法错。
修复代码
只要给read_csv加上分隔符参数就行,完整修正后的代码如下:
import pandas as pd class Login: def Userlogin(self): # 指定sep为分号,匹配CSV的分隔规则 df = pd.read_csv('Csv/Users.csv', sep=';') print('Log ind\n') user = input('Brugernavn : ') pasw = input('Password : ') # 用方括号取列比属性取列更稳妥,避免和内置属性重名冲突 matching_creds = ((df['brugernavn'] == user) & (df['password'] == pasw)).any() if matching_creds: print('succes') else: # 修复缩进错误 print('kontakt admin') LoginHandler = Login() LoginHandler.Userlogin()
优化建议
- 尽量用
df['列名']的方式取列,不要用df.列名的属性访问,万一列名和DataFrame自带的方法/属性重名,会直接出逻辑问题。 - 判断有没有匹配的凭证不用算长度,用
any()方法更高效,只要有一条符合就会返回True。
内容的提问来源于stack exchange,提问作者Valon Cazimi
相关产品推荐
相关产品推荐

