Python多次读取csv并执行print语句

Python多次读取csv并执行print语句,python,csv,if-statement,Python,Csv,If Statement,我有一个包含4个字段的csv文件: JFK,John F Kennedy International,5326,5486 ORY,Paris-Orly,629,379 MAD,Adolfo Suarez Madrid-Barajas,1428,1151 AMS,Amsterdam Schiphol,526,489 CAI,Cairo International,3779,3584 我将用户输入的代码与每行的第一个字段进行比较。如果匹配,我想打印第二个字段。如果它与CSV中的任何条目不匹配,我

我有一个包含4个字段的csv文件:

JFK,John F Kennedy International,5326,5486 
ORY,Paris-Orly,629,379
MAD,Adolfo Suarez Madrid-Barajas,1428,1151
AMS,Amsterdam Schiphol,526,489
CAI,Cairo International,3779,3584
我将用户输入的代码与每行的第一个字段进行比较。如果匹配,我想打印第二个字段。如果它与CSV中的任何条目不匹配,我想打印“错误”

但即使找到代码,“错误”也会被打印多次

我怎样才能防止呢

代码是:

if num == 1:
    Adetails = input("Enter airport details (Please enter the three letter code for the UK airport): ")
    while Adetails not in ("LPL", "BOH"):
        Adetails = input("Error three letter airport code invalid. Please enter either LPL or BOH: ")
    Odetails = input("Enter overseas airport details (Please enter the three letter code for the overseas airport): ")
    for row in inputfile:
        if row[0] == Odetails:
            print(row[1])
            repeat = False
        else:
            if row[0] != Odetails:
                print("ERROR")

你应该先打开这个文件。在顶部使用导入csv。 您可以从csv文档中看到示例:

在实践中有一个修正:

import csv

Adetails = input("Enter airport details (Please enter the three letter code for the UK airport): ")
while Adetails not in ("LPL", "BOH"):
    Adetails = input("Error three letter airport code invalid. Please enter either LPL or BOH: ")
    Odetails = input("Enter overseas airport details (Please enter the three letter code for the overseas airport): ")
    with open('test5.csv') as csvfile:
        inputfile = csv.reader(csvfile)
        for row in inputfile:
            # print(row)
            # print(Odetails)
            if row[0] == Odetails:
                print(row[1])
                break
        else:
            print("ERROR")
你需要慢一点。关键是一步一个脚印,准确理解每个变量是什么(类型)及其值应该是什么。很多打印语句(在这里注释掉)以确保事情符合您的期望,或者最好使用pycharm或其他调试器

这个答案假定存在一个名为“test5.csv”的文件

JFK,John F Kennedy International,5326,5486 
ORY,Paris-Orly,629,379 
MAD,Adolfo Suarez Madrid-Barajas,1428,1151 
AMS,Amsterdam Schiphol,526,489 
CAI,Cairo International,3779,3584
输出如下所示:

(base) [poleguy@dualie so]$ python test5.py
Enter airport details (Please enter the three letter code for the UK airport): a
Error three letter airport code invalid. Please enter either LPL or BOH: LPL
Enter overseas airport details (Please enter the three letter code for the overseas airport): JFK
['JFK', 'John F Kennedy International', '5326', '5486 ']
JFK
John F Kennedy International

你应该先打开这个文件。在顶部使用导入csv。 您可以从csv文档中看到示例:

在实践中有一个修正:

import csv

Adetails = input("Enter airport details (Please enter the three letter code for the UK airport): ")
while Adetails not in ("LPL", "BOH"):
    Adetails = input("Error three letter airport code invalid. Please enter either LPL or BOH: ")
    Odetails = input("Enter overseas airport details (Please enter the three letter code for the overseas airport): ")
    with open('test5.csv') as csvfile:
        inputfile = csv.reader(csvfile)
        for row in inputfile:
            # print(row)
            # print(Odetails)
            if row[0] == Odetails:
                print(row[1])
                break
        else:
            print("ERROR")
你需要慢一点。关键是一步一个脚印,准确理解每个变量是什么(类型)及其值应该是什么。很多打印语句(在这里注释掉)以确保事情符合您的期望,或者最好使用pycharm或其他调试器

这个答案假定存在一个名为“test5.csv”的文件

JFK,John F Kennedy International,5326,5486 
ORY,Paris-Orly,629,379 
MAD,Adolfo Suarez Madrid-Barajas,1428,1151 
AMS,Amsterdam Schiphol,526,489 
CAI,Cairo International,3779,3584
输出如下所示:

(base) [poleguy@dualie so]$ python test5.py
Enter airport details (Please enter the three letter code for the UK airport): a
Error three letter airport code invalid. Please enter either LPL or BOH: LPL
Enter overseas airport details (Please enter the three letter code for the overseas airport): JFK
['JFK', 'John F Kennedy International', '5326', '5486 ']
JFK
John F Kennedy International

您可以为您测试的CSV的每一行打印一些内容,无论是检索到的数据还是“错误”

您要做的是,仅当循环到末尾而未遇到有效条目时,才打印“ERROR”。这是一个使用
else
块进行
循环的好地方:只有在没有
中断
的情况下耗尽循环时,才会执行它

因此,您的代码是:

for row in inputfile:
    if row[0] == Odetails:
        print(row[1])
        break
else: 
    # Executed if we never did break out of the loop, 
    # which means that no matching entry was found
    print("ERROR")

您可以为您测试的CSV的每一行打印一些内容,无论是检索到的数据还是“错误”

您要做的是,仅当循环到末尾而未遇到有效条目时,才打印“ERROR”。这是一个使用
else
块进行
循环的好地方:只有在没有
中断
的情况下耗尽循环时,才会执行它

因此,您的代码是:

for row in inputfile:
    if row[0] == Odetails:
        print(row[1])
        break
else: 
    # Executed if we never did break out of the loop, 
    # which means that no matching entry was found
    print("ERROR")

请尝试我的“修复”,它会让你摆脱困境。第一部分是无关的,使用的参数与OP的CSV格式不匹配。此外,它也不能解决打印“错误”3次的问题。这一点很好。这些都是在他发布csv之前发布的。我会编辑。是的,我也错过了问题是要求它不要在每一行重复输出。他实际上并没有明确地问这个问题。从问题的标题上看,这是否是个问题,或者他的意图并不清楚。他的问题里连一个问号都没有。所以我猜你是对的。更新以修复此问题。问题不完全清楚,我只是编辑了它。至于解决问题的方法,我几分钟前已经回答了相同的问题……;)请尝试我的“修复”,它会让你摆脱困境。第一部分是无关的,使用的参数与OP的CSV格式不匹配。此外,它也不能解决打印“错误”3次的问题。这一点很好。这些都是在他发布csv之前发布的。我会编辑。是的,我也错过了问题是要求它不要在每一行重复输出。他实际上并没有明确地问这个问题。从问题的标题上看,这是否是个问题,或者他的意图并不清楚。他的问题里连一个问号都没有。所以我猜你是对的。更新以修复此问题。问题不完全清楚,我只是编辑了它。至于解决问题的方法,我几分钟前已经回答了相同的问题……;)