我需要在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')
运行代码的最后一部分后,我根本没有收到控制台输出,既没有组的行,也没有“未找到”。
答案 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)