openpyxl 에서 대량의 데 이 터 를 읽 는 방법-Optimized reader

1865 단어 python
때때로 우 리 는 데이터 양 이 매우 많은 XLSX 파일 을 열거 나 써 야 하 며,openpyxl 의 일반적인 방법 으로 는 이렇게 큰 부 하 를 처리 할 수 없습니다.반 가운 것 은 openpyxl 에 두 가지 모델 이 있어 서 우 리 는 상수 급 메모리 소모 로 무한 한 데 이 터 를 읽 고 쓸 수 있 습 니 다.
본 고 는 먼저 대량의 데 이 터 를 읽 는 방법 을 소개 하고 쓰 는 방법 을 시도 하지 않 았 습 니 다.나중에 붙 일 것 이 있 으 면 참고 할 수 있 습 니 다.http://packages.python.org/openpyxl/optimized.html。
우선,우 리 는 엑셀 표를 열 어야 합 니 다.예전 의 열기 방식 과 거의 다 릅 니 다.예 를 들 어 우 리 는 haggle 이라는 xlsx 파일 을 열 어야 합 니 다.그 호출 방식 은?
wb = load_workbook(filename = 'haggle.xlsx',use_iterators=True)뒤에 use 가 하나 더 있 는 걸 발 견 했 어 요.iterators=True。
그 다음 에 우 리 는 이 워 크 시트 의 구체 적 인 워 크 시트(sheet)를 열 어야 한다.뉴스=wb.getsheet_by_name(name='Sheet 1')이때 ws 는 Iterable Worksheet 입 니 다.
다음 에 우 리 는 이 워 크 시트 ws 를 처리 할 수 있 습 니 다.우 리 는 코드 중의 한 함 수 를 중점적으로 설명 하고 먼저 코드 를 붙 여야 합 니 다.이 코드 의 기능 은 C 열 1-21282 줄 에 각각 0,1 에서 35 의 횟수 가 나타 나 는 것 을 통계 하고 다른 엑셀 에 기록 하 는 것 이다.
from openpyxl import load_workbook
from openpyxl import Workbook

dest_filename='haggle.xlsx'
new_filename='result_sf.xlsx'
wb = load_workbook(filename = dest_filename,use_iterators=True)
wb1 = Workbook()
ws=wb.get_sheet_by_name("Sheet4")
ws1=wb1.create_sheet(0, "socialfrequency")
for i in range(0,36):
    count=0
    for row in ws.iter_rows('C1:D21282'):#   
        for cell in row:#           
            if i==cell.internal_value:
                count=count+1
            else:
                continue
    ws1.cell(row=i,column=7).value=i
    ws1.cell(row=i,column=8).value=count
    
wb1.save(new_filename)

우리 가 중점적으로 해석 해 야 할 코드 는 ws.iter 이다rows('C1:D21282')이 함 수 는 C 열의 1 에서 21282 줄 을 되 돌려 주 었 습 니 다.이 함 수 는 C 를 포함 하여 D 를 포함 하지 않 지만 1 과 21282 줄 을 포함 하여 하마터면 나 를 죽 일 뻔 했 습 니 다.
메모:프로그램 을 정상적으로 실행 하려 면 프로그램의 모든 주석 한 자 를 제거 해 야 합 니 다.이것 은 인 코딩 문제 와 관련 되 어 있 습 니 다.아직 제 가 완전히 알 지 못 한 것 입 니 다.

좋은 웹페이지 즐겨찾기