--- --- 내용이 시작 복원
공용 라이브러리 소개
xlrd
xlrd은 Excel 파일, 지원 .XLS 및 .XLSX 파일의 데이터 및 서식 정보를 읽을 수있는 라이브러리입니다.
http://xlrd.readthedocs.io/en/latest/
. 1지지 .XLS을 xlrd하는 .XLSX 파일 읽기
가변 on_demand open_workbook () 함수를 설정함으로써 시간과 메모리 (저장만을 필요 시트를로드하도록 2 이 방법은) .XLSX 파일이 유효하지 않습니다.
3, xlrd.Book unload_sheet 오브젝트 (파일이 잘못 .XLSX이 방법)에있어서, 그것이 인덱스 또는 워크 시트의 이름으로 지정 메모리로부터 워크를 제거한다 있습니다
xlwt
xlwt 정보 Excel 파일을 (예 : .XLS)을 이전 데이터를 작성하고 서식을위한 라이브러리입니다.
https://xlwt.readthedocs.io/en/latest/
1, xlwt 지원 .xls 파일 쓰기.
xlutils
xlutils 도서관이 xlrd 및 xlwt에 따라 Excel 파일을 처리합니다.
http://xlutils.readthedocs.io/en/latest/
1, xlutils은 .XLS 파일을 지원합니다.
2, 엑셀 작업에 대한 지원을 제공합니다.
xlwings
xlwings는 엑셀에서 달성 통화 파이썬이다, 엑셀은 파이썬 라이브러리를 호출 할 수 있습니다.
http://docs.xlwings.org/en/stable/index.html
1, xlwings 읽기 지원 .XLS, .XLSX 파일 읽기 및 쓰기 지원.
2, 엑셀 작업에 대한 지원을 제공합니다.
3, VBA에 대한 지원.
도 4는, 강력한 변환기 팬더 DataFrame NumPy와의 어레이와 양방향으로 포함하는 데이터 유형의 대부분을 처리 할 수있다.
openpyxl
openpyxl 읽기 및 Excel 2010 XLSX / XLSM / XLTX / 쓰기위한 라이브러리입니다 xltm의 파일을. 파이썬 데이터와 PDF의 세트를 마무리 샤오 총통은, 파이썬 학습 자료가 그룹에 추가 할 수 있습니다 배울 필요가 : 631 441 315, 어쨌든 아이들이 유휴 상태, ~ ~ 많은 것을 배울 것이 좋습니다
https://openpyxl.readthedocs.io/en/stable/
1, 파일을 읽고 openpyxl 지원을 .XLSX 물품.
2, 엑셀 작업에 대한 지원을 제공합니다.
3, .XLSX 파일은 큰 READ_ONLY 모드를로드 할 수 있습니다.
4, 큰 .XLSX 파일은 write_only 모드를 사용하도록 쓸 수 있습니다.
xlsxwriter
xlsxwriter 엑셀 .XLSX 파일을 생성하기위한 라이브러리입니다.
https://xlsxwriter.readthedocs.io/
1, xlswriter 지원 .xlsx 파일을 작성합니다.
2, VBA에 대한 지원.
3, 큰 .XLSX 파일을 쓸 때 메모리 최적화 모드를 사용하여.
win32com
win32com pywin32 읽고 Excel 파일 및 프로세스를 작성하는 라이브러리입니다 재고있다.
http://pythonexcels.com/python-excel-mini-cookbook/
1, win32com은 .XLS, .XLSX 파일 읽기 및 쓰기, 및 .XLSX 파일에 대한 지원을 쓰기를 지원합니다.
2, 엑셀 작업에 대한 지원을 제공합니다.
Dtnitro
DataNitro는 Microsoft Excel에서 플러그인에 포함된다.
https://datanitro.com/docs/
1, DataNitro은 .XLS, 읽기 및 쓰기 .XLSX 파일을 지원합니다.
2, 엑셀 작업에 대한 지원을 제공합니다.
3, VBA에 대한 지원.
4, 요금
판다
읽기, 데이터 입력 및 출력에 대한 엑셀 파일을 작성하여 팬더
http://pandas.pydata.org/
. 1, 팬더는 파일을 읽고 쓰기 .XLSX, .XLS을 지원합니다.
(2)는, 단 하나의 작업 부하 페이지 각 테이블을 지원합니다.
구성 및 동작 환경을 달성 할 수있다
![](https://upload-images.jianshu.io/upload_images/12778909-657df6e534288136.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
참고 : DataNitro이 플러그인 자체 소프트웨어의 사용에 의존 할 필요가있다.
참조 : https://zhuanlan.zhihu.com/p/23998083
읽기와 쓰기 테스트
컴퓨터 하드웨어 및 시스템 테스트
컴퓨터 모델 MSI MS-7846 데스크탑
운영 체제, 윈도우 7 얼티밋 64 비트 SP1 (다이렉트 X 11)
프로세서 인텔 펜티엄 (펜티엄) G3260의 @의 3.30GHz 듀얼 코어
메인 보드 MSI H81M-P32L (MS-7846) ( 인텔 하 스웰 - 살쾡이 포인트)
메모리 4기가바이트 (킹스톤 DDR3의 인 1600MHz)
주 하드 드라이브 웨스턴 디지털 WDC WD5000AZLX-00ZR6A0 (5백기가바이트 / 7200 RPM / 분)
그래픽 인텔 하 스웰 내장 그래픽 컨트롤러 (2백56메가바이트 / MSI)
테스트 케이스
예 1. (테이블, 다섯 개 개의 탭이있는 각 탭은 1,200 정수 2000 개 행이) .XLS 전체 테이블을 사용하여 파일을 읽습니다.
예 2. (테이블, 다섯 개 개의 탭이있는 각 탭은 1,200 정수 2000 개 행이) .XLSX 파일을 전체 테이블을 읽어보십시오.
예 3. (행의 정수가 2000 표 페이지 1200 탭이 있습니다) .XLS 파일이있는 전체 테이블을 읽어 보시기 바랍니다.
예 4. .XLSX 파일로 전체 테이블을 읽기 (표는 탭이, 2000 페이지 1200 행의 정수있다).
사용의 .XLS 파일 5 예 (각 탭은 1,200 정수 2000 개 행이 테이블은 다섯 개 가지 탭이 있습니다) 전체 테이블을 작성합니다.
예 6. (테이블, 다섯 개 개의 탭이있는 각 탭은 1,200 정수 2000 개 행이) .XLSX 파일로 전체 테이블을 작성합니다.
예 7. .XLS 파일이있는 전체 테이블을 쓰기 (표는 탭이, 2000 페이지 1200 행의 정수있다).
예 8. .XLSX 파일로 전체 테이블을 쓰기 (표는 탭이, 2000 페이지 1200 행의 정수있다).
테스트 결과
![](https://upload-images.jianshu.io/upload_images/12778909-e881c6dfbcf8de4d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
注1.xlwt和pandas每个工作页最多写入256列,因此测试用例修改为每页有2000行256列的整数.
注2.xlutils读写依赖于xlrd和xlwt,不单独测试。
注3.openpyxl测试两种模式,一是普通加载写入,二是read_only/write_only模式下的加载写入。
注4.DataNitro要收费,且需依托Excel使用,本次不测试。
읽기 및 성능 비교 쓰기
单从读写的性能上考虑,win32com的性能是最好的,xlwings其次。
openpyxl虽然操作Excel的功能强大,但读写性能过于糟糕,尤其是写大表时,会占用大量内存(把我的4G内存用完了),开启read_only和write_only模式后对其性能有大幅提升,尤其是对读的性能提升很大,使其几乎不耗时(0.01秒有点夸张,不过确实是加载上了)。pandas把Excel当作数据读写的容器,为其强大的数据分析服务,因此读写性能表现中规中矩,但其对Excel文件兼容性是最好的,支持读写.xls,.xlsx文件,且支持只读表中单一工作页。同样支持此功能的库还有xlrd,但xlrd只支持读,并不支持写,且性能不突出,需要配合xlutils进行Excel操作,并使用xlwt保存数据,而xlwt只能写入.xls文件(另一个可以写入.xls文件的库是pandas,且这两个写入的Excel文件最多只能有256列,其余库就我目前的了解均只能写入.xlsx文件),性能一般。xlsxwriter功能单一,一般用来创建.xlsx文件,写入性能中庸。win32com拥有最棒的读写性能,但该库存在于pywin32的库中,自身没有完善的文档,使用略吃力。xlwings拥有和win32com不相伯仲的读写性能,强大的转换器可以处理大部分数据类型,包括二维的numpy array和pandas DataFrame,可以轻松搞定数据分析的工作。 综合考虑,xlwings的表现最佳,正如其名,xlwings——Make Excel Fly!
비교의 용이성
本测试目前只是针对Excel文件的读写,并未涉及Excel操作,单从读写的便捷性来讲,各库的表现难分上下,但是win32com和xlwings这两个库可以在程序运行时实时在打开的Excel文件中进行操作,实现过程的可视化,其次xlwings的数据结构转换器使其可以快速的为Excel文件添加二维数据结构而不需要在Excel文件中重定位数据的行和列,因此从读写的便捷性来比较,仍是xlwings胜出。
테스트 코드
타이밍
수입 timeit 경우 __name__ == ' __main__ ' : # 使用timeit计时 t = timeit.Timer ( ' ?? () ' , 설정 = ' __main__ 수입에서 ?? ' ) 인쇄 (t.timeit (번호 = 1))
xlrd
수입 xlrd DEF test_xlrd_on_demand_false () : #의 F = xlrd.open_workbook ( 'test_cases \\ read_xls.xls'on_demand = 거짓) F = xlrd.open_workbook ( ' test_cases \\ read_xlsx.xlsx ' , on_demand = 거짓) DEF test_xlrd_on_demand_true () : #의 F = xlrd.open_workbook ( 'test_cases \\ read_xls.xls'on_demand = TRUE) F = xlrd.open_workbook ( ' test_cases \\ read_xlsx.xlsx ' , on_demand = 참) f.sheet_by_index (0)
xlwt
수입 xlwt의 책 = xlwt.Workbook () DEF test_xlwt () 에 대한 S 의 범위 (5 ) 시트 = book.add_sheet (STR (S)) 에 대한 I 의 영역 (2000 ) 에 대한 J 의 범위 (256 ) : 시트 에 .write (I, J, 65536 ) book.save ( ' test_cases \\ write_xls.xls ' )
xlwings
수입 xlwings는 DEF ) (test_xlwings_read : #의 F = xlwings.Book ( 'test_cases \\ read_xls.xls') F = xlwings.Book ( ' test_cases \\ read_xlsx.xlsx ' ) 가져 순이익 NumPy와 같이 F = xlwings.Book ( ''을 ) D = np.zeros ([2000, 1200 ]) D + = 65536 데프 test_xlwings_write () 에 대한 S 의 범위 (1 ) 시트 = f.sheets.add () sheet.range ( " A1 " ) = .value 디 f.save ( ' test_cases \\ write_xlsx.xlsx ' )
openpyxl
수입 openpyxl DEF test_openpyxl_read () : F openpyxl.load_workbook = ( ' test_cases \\ read_xlsx.xlsx ' , READ_ONLY = 참) C = [65536] * 1,200 F = openpyxl.Workbook (write_only = 참) DEF test_openpyxl_write () 에 대한 I 의 범위 (1 :) 시트 = f.create_sheet (제목 = STR (I)) 에 대한 행 의 영역 (2000 ) sheet.append (c) f.save ( ' test_cases \\ write_xlsx.xlsx ')
xlsxwriter
수입 xlsxwriter의 통합 문서 = xlsxwriter.Workbook ( ' test_cases \\ write_xlsx.xlsx ' ) DEF test_xlsxwriter () 에 대한 S 의 범위 (1 :) 워크 시트 = workbook.add_worksheet () 에 대한 전 에서 범위 (2000 ) 에 대한 J 의 범위 ( 1,200 ) worksheet.write (I, J, 65536 ) workbook.close ()
win32com
수입 win32com.client는 Win32 같이 엑셀 = win32.gencache.EnsureDispatch ( ' 이 Excel.Application ' ) DEF test_win32com_read () : #의 WB가 = excel.Workbooks.Open는 ( 'E : \\ test_cases \\ read_xls.xls 엑셀 \\') WB = excel.Workbooks.Open ( ' E는 : 엑셀 \\ \\ test_cases \\ read_xlsx.xlsx ' ) # excel.Visible = TRUE WB = excel.Workbooks.Add () DEF test_win32com_write () 에 대한 I 의 범위 (1 ) WS = wb.Worksheets.Add () ws.Range (" A1 : ATD2000 " ) .Value = 65536 wb.SaveAs ( " E : 엑셀 \\ \\ test_cases \\ write_xlsx.xlsx ' ) excel.Application.Quit ()
판다
수입 PD 등 팬더 DEF test_pandas_read () 에 대한 I 의 범위 (1, 6 ) SHEET_NAME = " 시트 " + STR (I) # DF = pd.read_excel ( 'test_cases \\ read_xls.xls'SHEET_NAME) DF = PD .read_excel ( ' test_cases \\ read_xlsx.xlsx ' , SHEET_NAME) 가져 순이익 NumPy와 같이 D = np.zeros ([2000, 255 ]) 거라고 + 65536 = DF = pd.DataFrame (d) #의 라이터 pd.ExcelWriter = ( ' test_cases \\ write_xls.xls ') 라이터 pd.ExcelWriter = ( ' test_cases \\ write_xlsx.xlsx ' ) DEF test_pandas_write () df.to_excel (작가 " 시트 1 ' ) df.to_excel (작가, ' 시트 2 ' ) df.to_excel (작가, ' Sheet3의 ' ) df.to_excel (작가, ' Sheet4의 ' ) df.to_excel (작가, ' Sheet5 ' ) writer.save을 ()
--- 끝 --- 복원 내용