2017-01-05 1 views
0

CSV 파일에서 특정 키워드를 검색하고 전체 키워드가있는 경우 전체 행에서 데이터를 가져와야합니다. file 나는 학교 일정 때문에 큰 편입니다.CSV 파일 열에서 키워드 검색하기

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') 

코드의 마지막 부분을 실행 한 후에는 콘솔 출력이 전혀 표시되지 않고 group 행도 "not found"도 표시되지 않습니다.

+0

그래서 질문은 무엇입니까? –

+0

죄송합니다. 편집했습니다. –

답변

0

열어 본 fileinput은 첫 번째 for 루프에서 이미 사용되었습니다. 파일을 다시 열거 나 파일을 찾는 포인터를 다시 설정해야합니다. csv.reader을 다시 인스턴스화하면 소모 된 내용이 여전히 사용 되었기 때문에 문제가 해결되지 않습니다. fileinput. 루프에 대한 루프와 두 번째 전에 첫 번째 후 :

fileinput.seek(0) 
+0

예! 그것은 효과가있다! 하지만 이제는 "찾을 수 없음"을 받기 때문에 데이터 유형에 문제가 있습니다. 실제로 항목을 비교하기 위해 user_choice를 래핑해야 할 열을 찾고있는 항목이 있는지 확인합니다. –

+0

내 잘못, 어떻게 든 '='대신 'is'를 사용했습니다. 문제는 100 % 해결되었습니다. 감사. –

+0

'else'발견되지 않은 블록도 제거하십시오. 매번 인쇄하고 성가신 것 같아요. –

0

나는 출력이 보이지 않는 이유는 csv.reader가 반복자를 반환하고 모든 줄을 반복하는 인쇄 문보다 먼저 루프를 가지고 있기 때문이라고 생각합니다. 두 번째로 모든 라인을 반복 할 때 iterator는 리턴 할 라인이 더 이상 없다. 나는 잘못 될 수 있지만 모든 행을 배열에 저장하거나 두 번째 for 루프 앞에 csv.reader를 다시 인스턴스화하는 문제를 해결할 수 있습니다.

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

고마워,하지만이 다른 친구는 fileinput.seek (0)에 대해 옳았다. 하지만 지금은 적어도 독자가 무엇을 반환하는지 알고 있습니다. –