在CSV文件列中搜索关键字

时间:2017-01-05 01:12:37

标签: python python-3.x csv

我需要在CSV文件中搜索特定关键字的列,如果找到,则从整行获取数据。 我正在工作的file是我学校的日程安排,所以它非常大。

import csv

with open('plan.csv', 'rt', encoding='windows 1250') as fileinput:

    # In the code below I first create a list of groups, skipping
    # duplicates, so that user can later select a group to show it's 
    # details.

    reader = csv.reader(fileinput, delimiter=';')

    groups = []
    #filling up the list with groups
    for row in reader:
        if row[12] in groups:
            continue
        elif row[12] is '':
            continue
        else:
            groups.append(row[12])

    # Just to make sure there's something in 'groups'
    print(groups[1:])

    # Then I'm asking a user to select the group.
    # user_choice = input('Group?')

    # setting up user_choice to make things simpler for testing
    user_choice = '3I4'

    # The last part is searching groups column (column index 12) for a 
    # specific group and if found – print whole row and continue 
    # the search.
    for row in reader:
        if row[12] is user_choice:
            print(row)
            continue
        else:
            print('not found')

运行代码的最后一部分后,我根本没有收到控制台输出,既没有组的行,也没有“未找到”。

2 个答案:

答案 0 :(得分:0)

我相信你没有看到输出的原因是因为csv.reader返回一个迭代器,你在print语句之前有一个遍历所有行的循环。第二次遍历所有行时,迭代器不再返回任何行,因此它永远不会进入for循环。我可能错了,但修复它要么将所有行保存到数组中,要么在第二个for循环之前重新实例化csv.reader。

 reader = csv.reader(fileinput, delimiter=';')

答案 1 :(得分:0)

您打开的fileinput已在第一个for循环中消耗。您需要重新打开文件或重置寻找文件的指针。重新实例化csv.reader只能解决问题,因为它仍然使用了消耗的fileinput在第一个for循环之后和第二个for循环之前

fileinput.seek(0)