将输入值与Python 3.4中的csv文件进行比较

将输入值与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

我有一个简单的问题,但我真的找不到正确的解决办法

我有一个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: ")

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文件的示例,并详细说明您希望如何使用它。