아미(아름다운미소)

[python]방대한 XLS (Excel) 파일을 읽고(쓰기) 본문

랭귀지/python

[python]방대한 XLS (Excel) 파일을 읽고(쓰기)

유키공 2017. 12. 21. 20:08
나는 한 프로젝트에서 거대한 XLS 파일을 읽어야 했습니다.

물론 COM 호출을 통하여 모든  내용에 접근할  있지만너무 느린 단점이 있습니다.

간단한 트릭이 있어요그냥 엑셀에게 XLS 파일을 열어 그것을 CSV 저장해 달라고 요구한 다음

파이썬의 CSV 모듈을 사용하여  파일을 읽어 들이면 됩니다!
 방법이 방대한 XLS 데이터 파일을 읽는 가장 빠른 방법입니다.

 
import os

import win32com.client


filename = 'myfile.xls'

filepath = os.path.abspath(filename) # 언제나 확실하게 절대 경로를 사용하자!


# 엑셀을 시작하고 XLS 파일을 연다:

excel = win32com.client.Dispatch('Excel.Application')
excel.Visible = True

workbook = excel.Workbooks.Open(filepath)

# CSV로 저장한다:

xlCSVWindows                  =0x17       # from enum XlFileFormat

workbook.SaveAs(Filename=filepath+".csv",FileFormat=xlCSVWindows)


# 작업책과 엑셀을 닫는다.

workbook.Close(SaveChanges=False)

excel.Quit()
힌트:  트릭을 다른 곳에서도 사용할  있습니다
(파이썬으로 CSV 만들고엑셀을 열어방대한 양의 데이터를 엑셀 안으로 반입합니다
 방법은 COM 호출을 통하여 데이터 셀을 채우는 것보다 훨씬  빠릅니다.

힌트: excel.Workbooks.Open() 사용할 ,os.path.abspath() 언제나 확실하게 절대 경로를 사용해야합니다.

힌트: 또한 엑셀에게 HTML 저장해 달라고 요청한 다음 HTML htmllib이나 sgmllib 또는 BeautifulSoup 해석할 수도 있습니다포맷팅컬러 스팬문서 저자나 심지어 수식에 이르기까지  많은 정보를 얻을  있을 것입니다. !

힌트: 엑셀 VBA 문서는 *.chm C:\Program Files\Microsoft Office\에서 검색해 보세요
예를 들어엑셀 2000이라면, C:\Program Files\Microsoft Office\Office\1036\VBAXL9.CHM 도움말입니다.

힌트: VBA 도움말 파일을 헤매지 않고서  행위에 상응하는 VBA 코드를 찾고 싶다면그냥  행위에 대한 매크로를 기록한 다음 열어 보세요!
이렇게 하면 자동으로 VBA 코드가 만들어집니다 (손쉽게 파이썬으로 변환할  있습니다).
 트릭을 보여주는 비디오를 만들었습니다 (프랑스어에요죄송): http://sebsauvage.net/temp/wink/excel_vbarecord.html

힌트: 가끔엑셀 상수가 필요하다상수 목록을 얻으려면:

1.     makepy.py 실행합니다 (- C:\Python24\Lib\site-packages\win32com\client\makepy.py) 

2.     목록에서, "Microsoft Excel 9.0 Object Library (1.3)" ( 그런거) 선택해서 ok 클릭합니다

3.     C:\Python24\Lib\site-packages\win32com\gen_py\ 디렉토리를 들여다 보시면.
 라이브러리를 감싼 포장자가 보일 것입니다 

4.     (예를 들어 00020813-0000-0000-C000-000000000046x0x1x3.py) 

5.         파일을 엽니다: Excel 상수와 그의 값이 들어있습니다 (그것을 코드에 붙여 넣으면 됩니다.) 
예를 들어:

xlCSVMSDOS                    =0x18       # from enum 
XlFileFormat
       xlCSVWindows                  =0x17       # from enum 
XlFileFormat 

힌트: 데이터를 엑셀 안으로 넣고 싶으면파이썬으로 HTML 문서를 만들어 Excel에게  파일을 열도록 요구할 수도 있습니다 폰트 색상이나 기타 등등을 설정할  있을 .

작은-힌트 1: 생성된 HTML 코드에 \n 많이 사용합시다 (특히 </td> 뒤에 말이다). 

엑셀은 기다란 줄을 좋아하지 않아요.

작은-힌트 2: CSS 스타일을 사용하여 여러 셀을 포맷하거나 색상을 설정할 수도 있습니다

그냥 생성된 HTML <style> 스타일 시트를 포함시켜 두면 됩니다.
작은-힌트 3: CSS 사용하면심지어  포맷도   있습니다 (텍스트숫자등등). 

예를 들어<style><!--.mystyle{mso-number-format:"\@";}--></style> 이라면 

<td class=mystyle>25</td> 사용하여 셀을 강제로 텍스트 셀로 만들  있습니다.

(충분히 쓸모가 있습니다

예를 들어엑셀이 국제 전화 번호를 계산하지 못하도록 막는데 말이 - 멍청이 어플리케이션 !)
또는 mso-number-format:"0\.000"; 하면 3자리 정밀도로 숫자 포맷을 강제할  있다

 

Comments