2017-04-07 3 views
0

CSV 파일의 일괄 읽기를 수행하고 일부 콜백으로 배치를 처리하려고합니다. CSV 파일의 파이썬 배치 읽기

import csv 

with open('file.csv', 'r') as csvfile: 
    reader = csv.reader(csvfile) 
    header = next(reader) # skip header 

    batch_size = 3 
    batch = [] 
    count = 0 

    for row in reader: 
     if count >= batch_size: 
      do_something(batch) 
      batch = [] 
      count = 0 

     batch.append(row) 
     count += 1 

는 이제 CSV 파일 (헤더없이) 10 개 행이 가정하자 및 BATCH_SIZE 3입니다. 예상되는 결과는 4 개의 배치이어야합니다. 3 개의 행이있는 3 개의 배치와 4 번째의 배치는 1 개의 행만 포함합니다. 내가 작성한 코드는 3 개의 배치 만 생성합니다. 배치 크기가 1/2/5/10 인 경우 - 모든 사항이 정상입니다.

답변

4

상태 수 count >= batch_size은 행 수를 batch_size으로 나눌 수없는 경우 나머지 수를 생성하지 않으므로 마지막 몇 행에 대해 True이되지 않습니다.

따라서 마지막 배치/나머지를 수동으로 지워야합니다. 그냥 루프의 후이 같은 것을 추가 :

if batch: 
    do_something(batch) 

이 (가 사용할 수있는 모든 행을 반복 할 때마다, 루프 이미 않는) 경우 지난 몇 행이 batch에 축적되어, 다시 함수를 호출합니다 .

관련 문제