문제 :
Python 2.7에서 Massive .CSV 파일 (최대 1 백만 행, 200 열)을 읽는다. 그러나이 메소드는 과도한 메모리를 소비하기 때문에 큰 파일에 비현실적이됩니다.
솔루션 :
1. 생성 된 행은 다음과 같이 생성됩니다 :
전체 파일을 메모리에로드하지 마십시오. 대신 발전기 기능을 사용하여 생성 된 행정 행. csvfile로 Open (filename, "rb")을 사용하여 : DataReader = CSV.Reader (CSVFile) 다음으로 수율 (DataReader) # 헤더 행을 산출합니다 DataReader의 행 : row [3] == 기준 인 경우 : 수율 행
def getstuff(filename, criterion): with open(filename, "rb") as csvfile: datareader = csv.reader(csvfile) yield next(datareader) # yield the header row for row in datareader: if row[3] == criterion: yield row2. 필터링에 생성기 함수를 사용하십시오 :
필터 데이터는 생성기 함수를 사용하여 파일을 반복합니다. 이 접근법은 특정 기준을 충족하는 여러 연속 행을 일치시킬 수 있습니다. csvfile로 Open (filename, "rb")을 사용하여 : DataReader = CSV.Reader (CSVFile) 다음으로 수율 (DataReader) # 헤더 행을 산출합니다 Take While에서 수확량 ( lambda r : r [3] == 기준, Drophile (Lambda R : R [3]! = Criterion, DataReader))) 반환
def getstuff(filename, criterion): with open(filename, "rb") as csvfile: datareader = csv.reader(csvfile) yield next(datareader) # yield the header row yield from takewhile( lambda r: r[3] == criterion, dropwhile(lambda r: r[3] != criterion, datareader)) return
refactor getData () GetData ()도 생성기 기능을 사용하여 언제든지 메모리에서 한 행만 유지되도록합니다. 기준의 기준 : getStuff의 행 (filename, criterion)의 경우 : 수율 행 더 빠르고 효율적인 처리를위한 데이터베이스.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3