将输入值与Python 3.4中的csv文件进行比较
我有一个简单的问题,但我真的找不到正确的解决办法 我有一个csv文件,其中包含注册学生的姓名和科目: 名称,主题1,主题2,主题3 学生1,MN1,MN2,MN3 学生2,BN1,BN2,BN3 学生3,MN4,MN5,MN6 学生需要输入自己的姓名和科目名称,以检查自己是否已注册该科目 我的代码:将输入值与Python 3.4中的csv文件进行比较,python,csv,Python,Csv,我有一个简单的问题,但我真的找不到正确的解决办法 我有一个csv文件,其中包含注册学生的姓名和科目: 名称,主题1,主题2,主题3 学生1,MN1,MN2,MN3 学生2,BN1,BN2,BN3 学生3,MN4,MN5,MN6 学生需要输入自己的姓名和科目名称,以检查自己是否已注册该科目 我的代码: import csv Name = input("Please provide your name: ") Subject = input("Please provide your Subject
import csv
Name = input("Please provide your name: ")
Subject = input("Please provide your Subject: ")
with open('students.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
if (row['name'] == Name and row['subject1'] == Subject or
row['subject2'] == Subject or row['subject3'] == Subject):
print ("You are registered. It won't take long to run your VM")
else:
print ("You are not registered")
我的问题是它给了我多个输出
输出:
请提供您的姓名:Student3
请提供您的主题:MN4
你没有注册
你没有注册
你已经注册了。运行虚拟机不会花费很长时间
显然,它应该是:
你已经注册了。运行虚拟机不会花费很长时间
你能帮我解决这个问题吗?
谢谢请注意,Python中的
for
循环有一个可选的else
子句,当循环结束时,该子句将在没有break
语句的情况下执行
您的代码打印循环的每个迭代。您想要的是只在循环结束时打印
with open('students.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
if (row['name'] == Name and (row['subject1'] == Subject or row['subject2'] == Subject or row['subject3'] == Subject)):
print("You are registered. It won't take long to run your VM")
break
else:
print("You are not registered")
请注意,Python中的
for
循环有一个可选的else
子句,当循环结束时,该子句将在没有break
语句的情况下执行
您的代码打印循环的每个迭代。您想要的是只在循环结束时打印
with open('students.csv') as csvfile:
reader = csv.DictReader(csvfile)
for row in reader:
if (row['name'] == Name and (row['subject1'] == Subject or row['subject2'] == Subject or row['subject3'] == Subject)):
print("You are registered. It won't take long to run your VM")
break
else:
print("You are not registered")
数据框将是存储csv文件的良好结构。请给它一个阅读,无论如何来到你的代码。请参考下面的代码 请为此安装pandas和numpy
pip install pandas
pip install numpy
代码:
import pandas as pd
import numpy as np
df = pd.read_csv("testing.csv")
Name = input("Please provide your name: ")
Subject = input("Please provide your Subject: ")
query = '(name == '+ '\'' + Name + '\'' + ') and (subject1 == '+ '\'' \
+ Subject + '\'' + ' or subject2 == ' + '\'' + Subject + '\'' \
+ ' or subject2 == ' + '\'' + Subject + '\')'
if df.query(query).empty:
print ("You are registered. It won't take long to run your VM")
else:
print ("You are not registered")
参考资料:
import pandas as pd
import numpy as np
df = pd.read_csv("testing.csv")
Name = input("Please provide your name: ")
Subject = input("Please provide your Subject: ")
query = '(name == '+ '\'' + Name + '\'' + ') and (subject1 == '+ '\'' \
+ Subject + '\'' + ' or subject2 == ' + '\'' + Subject + '\'' \
+ ' or subject2 == ' + '\'' + Subject + '\')'
if df.query(query).empty:
print ("You are registered. It won't take long to run your VM")
else:
print ("You are not registered")
数据框将是存储csv文件的良好结构。请给它一个阅读,无论如何来到你的代码。请参考下面的代码 请为此安装pandas和numpy
pip install pandas
pip install numpy
代码:
import pandas as pd
import numpy as np
df = pd.read_csv("testing.csv")
Name = input("Please provide your name: ")
Subject = input("Please provide your Subject: ")
query = '(name == '+ '\'' + Name + '\'' + ') and (subject1 == '+ '\'' \
+ Subject + '\'' + ' or subject2 == ' + '\'' + Subject + '\'' \
+ ' or subject2 == ' + '\'' + Subject + '\')'
if df.query(query).empty:
print ("You are registered. It won't take long to run your VM")
else:
print ("You are not registered")
参考资料:
import pandas as pd
import numpy as np
df = pd.read_csv("testing.csv")
Name = input("Please provide your name: ")
Subject = input("Please provide your Subject: ")
query = '(name == '+ '\'' + Name + '\'' + ') and (subject1 == '+ '\'' \
+ Subject + '\'' + ' or subject2 == ' + '\'' + Subject + '\'' \
+ ' or subject2 == ' + '\'' + Subject + '\')'
if df.query(query).empty:
print ("You are registered. It won't take long to run your VM")
else:
print ("You are not registered")
我相信字典最适合你:
import csv
data = {i[0]:i[1:] for i in csv.reader(open('filename.csv'))}
Name = input("Please provide your name: ")
Subject = input("Please provide your Subject: ")
if Subject in data[Name]:
print("you are registered")
else:
print("you are not registered")
我相信字典最适合你:
import csv
data = {i[0]:i[1:] for i in csv.reader(open('filename.csv'))}
Name = input("Please provide your name: ")
Subject = input("Please provide your Subject: ")
if Subject in data[Name]:
print("you are registered")
else:
print("you are not registered")
感谢老兄,它在最后一次迭代中有效,但在第一次迭代后停止。感谢老兄,它在第一次迭代后有效,但在最后一次迭代后停止。Data={i[0]:i[1:]for i in csv.reader(open('filename.csv'))}-请解释这一行好吗?谢谢,行得通。@Ruslan,这句话叫做字典理解。它从csv文件中获取每一行,并使用第一个元素
i[0]
创建一个字典键。然后,使用列表切片创建此字典的值,它通过保留列表的右半部分(从第二个元素开始)进行变异i
。谢谢!如果你不介意的话,我还有另一个问题,我要添加第二个csv文件,如果名称和主题匹配,那么需要使用该文件…所以我需要为第二个csv文件添加另一个词典?@Ruslan实际上这要视情况而定。你可以用另一本字典;但是,您也可以使用zip()
对这两个文件的内容进行迭代。请发布您的第二个csv文件的示例,并详细说明您希望如何使用它。data={i[0]:i[1:]for i in csv.reader(open('filename.csv'))}-您能解释一下这一行吗?谢谢,行得通。@Ruslan,这句话叫做字典理解。它从csv文件中获取每一行,并使用第一个元素i[0]
创建一个字典键。然后,使用列表切片创建此字典的值,它通过保留列表的右半部分(从第二个元素开始)进行变异i
。谢谢!如果你不介意的话,我还有另一个问题,我要添加第二个csv文件,如果名称和主题匹配,那么需要使用该文件…所以我需要为第二个csv文件添加另一个词典?@Ruslan实际上这要视情况而定。你可以用另一本字典;但是,您也可以使用zip()
对这两个文件的内容进行迭代。请发布您的第二个csv文件的示例,并详细说明您希望如何使用它。