【问题标题】:User input to generate new list from .csv file?用户输入从 .csv 文件生成新列表?
【发布时间】:2017-09-19 17:06:15
【问题描述】:

我有一个问题,希望有好心人帮忙解答!

我有一个 .csv 文件,标题中有三个项目,并且许多已分配。打印出来的 .csv 文件如下所示:

['NUTS CODE', 'NUTS NAME', 'Change 2008-2014']
['AT11', 'Burgenland (AT)', '0.6']
['AT12', 'Niederosterreich', '1.4']
['AT13', 'Wien', '2.9']
['AT21', 'Karnten', '2.4']
['AT22', 'Steiermark', '1.1']
['AT31', 'Oberosterreich', '1.3']
['AT32', 'Salzburg', '0.7']
['AT33', 'Tirol', '0.6']
['AT34', 'Vorarlberg', '-0.7']
['BE10', 'Region de Bruxelles-Capitale / Brussels Hoofdstedelijk Gewest', '2.4']
['BE21', 'Prov. Antwerpen', '1.5']
['BE22', 'Prov. Limburg (BE)', '1.2']
['BE23', 'Prov. Oost-Vlaanderen', '0.7']
['BE24', 'Prov. Vlaams-Brabant', '0.8']
['BE25', 'Prov. West-Vlaanderen', '1.5']

我想创建一个程序,该程序接受用户输入,其中输入与第一个值相关,比如我输入:“AT”,然后程序返回与该代码相关的所有相应名称和值。示例:如果我输入“BE”,代码将创建以下列表: [["BE10", "Region de Bruxelles-Capitale / Brussels Hoofdstedelijk Gewest", 2.4], [BE21', 'Prov. Antwerpen', '1.5']]

这是我用来打开的:

import csv

with open ('Change_in_Unemployment_2008-2014.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    #next(readCSV)     #Uncomment to remove header

for row in readCSV:
    print(row)

csvfile.close()

【问题讨论】:

    标签: python python-3.x csv dictionary


    【解决方案1】:
    result = []
    user_input = input()
    for row in readCSV:
        if row[0].startswith(user_input):
            result.append(row)
    print (result)
    

    【讨论】:

    • 如果用户输入的字符串不在行 [0] 中,我想打印一条消息(仅一次),说明数据不存在怎么办?我尝试了 else: 语句,但它为列表中的每次迭代提供了相同的消息,即许多消息。
    【解决方案2】:

    上面的答案几乎是正确的,只需要两个修复。你必须跳过标题行,因为那是你的列标签,最好使用 raw_input 来获取用户输入,因为输入被解释为 python 代码。

    strInput = input("Please enter a full/partial NUTS code to filter by:")
    

    然后修改你的for循环如下:

    header = True
    for row in readCSV:
        if header = True:
            print row
            header = False
            continue
        if row[0].startswith(strInput):
            print (row)
    

    【讨论】:

    • 问题被标记为python-3-x,所以raw_inputprint 作为陈述是不正确的。
    • 如果用户输入的字符串不在行 [0] 中,我想打印一条消息(仅一次),说明数据不存在怎么办?我尝试了 else: 语句,但它为列表中的每次迭代提供了相同的消息,即许多消息。
    • 谢谢马克 - 刚刚修改了答案以反映这一点!
    • Joakim - 在你的 for 循环之前,设置一个名为 found = False 的变量。如果你找到了一些东西,那么设置 found = True。在循环之后,您可以检查 found 是否仍然是错误的,如果是,则打印一条消息说没有找到。
    猜你喜欢
    • 1970-01-01
    • 2013-05-09
    • 1970-01-01
    • 2017-10-20
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-06-29
    • 2014-08-11
    相关资源
    最近更新 更多