首页 > 解决方案 > 尝试根据 csv 文件检查用户输入

问题描述

我正在尝试创建一个脚本,该脚本将从用户那里获取邮政编码,然后将其与 csv 文件进行检查以验证它是否是真实的邮政编码。然后我使用 robobrowser 从网上提取一些天气数据。我无法将用户输入与我的 csv 文件进行比较。我已经尝试了一些我在这里看到的不同的东西,但似乎无法弄清楚。如果邮政编码正确,则应将其传递,否则应再次要求用户输入邮政编码。无论如何,我正在寻找针对 csv 文件检查输入。这可能是一个简单的解决方法,我似乎无法弄清楚。csv 文件有一堆列,但我只想处理第一个称为 zip 的列。提前致谢!

from robobrowser import RoboBrowser
import csv


def location():
    global zipcode

    zipcode = input('Please enter your five digit zip code:\n')

    with open(r'C:\Users\Josh\PycharmProjects\Scripting_fund\zip.csv') as zipcodefile:
    reader = csv.DictReader(zipcodefile)
    for row in reader:
        if row['zip'] == zipcode :
            lookup()
        else:
            location()

标签: python-3.xcsvvalidationinputrobobrowser

解决方案


这是一个示例脚本,可能适用于您正在尝试做的事情:

import csv

ZIPCODES = []


def valid(zipcode):
    return zipcode in ZIPCODES


def location():
    while True:
        zipcode = input('Please enter your five digit zip code:\n')
        if valid(zipcode):
            return zipcode
        else:
            print("That's not a valid zipcode.")
            continue


if __name__ == '__main__':
    with open(r'C:\Users\Josh\PycharmProjects\Scripting_fund\zip.csv') as zipcodefile:
        reader = csv.DictReader(zipcodefile)
        ZIPCODES = [row['zip'] for row in reader]

    user_zipcode = location()

通常最好避免使用该global语句,但如果您确实使用它,则需要在定义它的函数之外zipcode启动......您可能已经这样做了,只是没有将其包含在您的问题中。


推荐阅读