【问题标题】:Unable to search a record in list in list无法在列表中搜索列表中的记录
【发布时间】:2019-09-17 09:08:53
【问题描述】:

在 StackOverflow 的一些贡献者的帮助下,我编写了一个小程序来读取 CSV 文件,以便我可以搜索一条或多条记录。该程序可以运行并经过测试,但是当它从 CSV 文件中读取时,它不起作用。我尝试在列表列表中搜索记录,但找不到任何内容。有人可以帮忙吗?

import csv

#Read in CSV file
datafile = open('nba_2Records.csv', 'r')
datareader = csv.reader(datafile, delimiter=';')
data = []
for row in datareader:
    data.append(row)    

print(f"Data = {data}")

# Search Value
search = 'Boston Celtics'

for sublist in data:

    print(f"sublist : {sublist}")
    if search in sublist:
        print("Found it!" + str(sublist))
    else:
        print("Not found")


=============================================================================================================================
Data = [['Name,Team,Number,Position,Age,Height,Weight,College,Salary'], ['Avery Bradley,Boston      Celtics,0,PG,25,2-Jun,180,Texas,7730337'], ['Jae Crowder,Boston Celtics,99,SF,25,6-Jun,235,Marquette,6796117']]
sublist : ['Name,Team,Number,Position,Age,Height,Weight,College,Salary']
Not found
sublist : ['Avery Bradley,Boston Celtics,0,PG,25,2-Jun,180,Texas,7730337']
Not found
sublist : ['Jae Crowder,Boston Celtics,99,SF,25,6-Jun,235,Marquette,6796117']
Not found

【问题讨论】:

    标签: python-3.x list csv


    【解决方案1】:

    您的子列表是只有一个字符串项的数组,当使用string in list 时,它将搜索等于字符串的列表项,而不是字符串中包含的列表项。

    如果子列表中总是有一个元素,则可以这样做

    if search in sublist[0]:
            print("Found it!" + str(sublist))
    

    否则你必须添加另一个循环

    for item in sublist:
        if search in item:
            print("Found it!" + str(item))
    

    【讨论】:

    • 您好,开发者,谢谢。它现在正在工作。一个问题,一旦基于 2 行上的“波士顿凯尔特人队”选择,我如何从 2 行中添加“7730337”和“6796117”。
    • 你怎么知道我的子列表是一个数组?我以为我的子列表是一个列表。
    • 我也指列表,要提取行中逗号后的数字,您可以使用 sublist[0].split(",")[-1] 将字符串拆分为逗号并取最后一部分
    【解决方案2】:

    你需要使用分隔符为,

    例如:

    search = 'Boston Celtics'
    
    with open('nba_2Records.csv') as datafile:
        datareader = csv.reader(datafile, delimiter=',')
        next(datareader) #Skip header
        for row in datareader:
            if search in row:
                print("Found it! " + row)
    

    【讨论】:

    • 感谢 Rakesh,我测试了您的代码,唯一的更改是对行进行字符串化。我有一个问题要问你,你如何收集选定的输出,然后像电子表格一样执行计算。
    • 什么计算?
    • 在其中包含数值的列上添加计算。如何像操作 Excel 表格一样操作列表,我可以在其中选择行和列?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多