2017-11-23 8 views
1

전체 파일을 한 번에로드하지 않고 BIG Excel 파일 (xlsx)에서 단 10 줄만 읽으려고합니다. 내 파일 중 하나에서 수행 할 수 없으므로 기계 (낮은 메모리). 나는 Loading 전체 파일을 메모리에로드하는 대신 청크로 파일 청크를로드합니다.

import xlrd 
import pandas as pd 
def open_file(path): 
    xl = pd.ExcelFile(path) 
    reader = xl.parse(chunksize=1000) 
    for chunk in reader: 
     print(chunk) 

를 사용하여 시도했지만 파일이 짜증있는 부분으로 나누어 먼저로드처럼 보인다. 첫 번째 줄만 읽는 방법에 대한 조언을 보내 주시면 감사하겠습니다. 더 자세한 정보가 필요하면 의견을 남겨주세요.하지만 모든 것이 명확해야합니다. 감사!

+0

분명히 판다를 사용하고 있지만 아직 지정하지 않았습니다. 전체 코드를 표시하고 있습니까? – Barnabus

+1

엄격하게 팬더를 준수하지는 않지만, 자동으로 핵심 계산을 수행하지 않는 SFrame을 사용하는 것이 좋습니다. 'pip install --U sframe'을 사용하여 설치하십시오. –

+0

Barnabus 더 많은 코드를 보여줄 필요가 없습니다. 난 단지 n 개의 행만로드하려고합니다. 편집 : @VivekKalyanarangan 답변 해 주셔서 감사합니다. 제가 확인하겠습니다. – Kornel

답변

1

본질적으로 xml 파일 묶음입니다. 따라서 파일을 임의의 바이트로 찌를 수는 없으며 파일의 N 번째 행의 시작이되도록 할 수 있습니다. 당신이 관심이있는 시트

가장 좋은 방법은 skiprows (파일 상단의 행 건너 뛰기)과 skip_footer (하단의 행 건너 뛰기) 인수를 사용하여 pandas.read_excel을 사용하는 것입니다. 그러나 먼저 전체 파일을 메모리에로드 한 다음 필요한 행만 구문 분석합니다. 당신이 names 인수를 수동으로 헤더를 설정해야

# if the file contains 300 rows, this will read the middle 100 
df = pd.read_excel('/path/excel.xlsx', skiprows=100, skip_footer=100, 
        names=['col_a', 'col_b']) 

참고 그렇지 않으면 열 이름은 마지막 행을 건너 뜁니다.

대신 csv을 사용하려면 csv 파일이 일반 텍스트 파일이므로 직접적인 작업입니다.

그러나, 당신은 당신이 xlsx 아카이브에서 해당 시트의 xml 파일을 추출하고 구문 분석 할 수 정말 필사적 경우는, 큰 하지만입니다. 그것은 쉬운 일이 아니지만.

예 : xml 단일 2 X 3 테이블이있는 시트를 나타내는 파일. <v> 태그는 셀의 값을 나타냅니다.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"> 
    <dimension ref="A1:B3"/> 
    <sheetViews> 
     <sheetView tabSelected="1" workbookViewId="0"> 
      <selection activeCell="C10" sqref="C10"/> 
     </sheetView> 
    </sheetViews> 
    <sheetFormatPr defaultColWidth="11" defaultRowHeight="14.25" x14ac:dyDescent="0.2"/> 
    <sheetData> 
     <row r="1" spans="1:2" ht="15.75" x14ac:dyDescent="0.2"> 
      <c r="A1" t="s"> 
       <v>1</v> 
      </c><c r="B1" s="1" t="s"> 
       <v>0</v> 
      </c> 
     </row> 
     <row r="2" spans="1:2" ht="15" x14ac:dyDescent="0.2"> 
      <c r="A2" s="2"> 
       <v>1</v> 
      </c><c r="B2" s="2"> 
       <v>4</v> 
      </c> 
     </row> 
     <row r="3" spans="1:2" ht="15" x14ac:dyDescent="0.2"> 
      <c r="A3" s="2"> 
       <v>2</v> 
      </c><c r="B3" s="2"> 
       <v>5</v> 
      </c> 
     </row> 
    </sheetData> 
    <pageMargins left="0.75" right="0.75" top="1" bottom="1" header="0.5" footer="0.5"/> 
</worksheet> 
+0

문제는 파일 전체를로드 한 다음 청크로 분할한다는 것입니다. 대답 주셔서 감사하지만, 그것은 또한 내가 찾고있는 것이 아닙니다. – Kornel

+1

@Kornel 업데이트 된 답변보기, 몇 가지 정보를 추가했습니다. – DeepSpace

+0

답변 해 주셔서 감사합니다. 알만한 가치가있는 좋은 정보. 나는 이것을 나의 질문에 대한 답으로 표시 할 것이다. – Kornel