python 각종 excel 쓰기 방식의 속도 대비

실험을 통해 새 excel 표를 만들었습니다. 이 표는 7개의sheet를 가지고 있으며, 각각sheet에는 800개의 데이터가 있으며, 그 중 마지막 sheet는 비어 있습니다.
먼저 openpyxl을 사용하여 쓰기 작업을 합니다. 코드는 다음과 같습니다.

book = openpyxl.Workbook()
auths = Auth.objects.filter(owner_id=1)
filename = ' '
for auth in auths:
  sheet = book.create_sheet(auth.name, index = 0)
  sheet.append([
      _(" "),
      _(" "),
      _(" "),
      _(" "),
      _(" "),
      _(" "),
    ])
  objs = None
  objs = Book.objects.filter(owner_id=auth.id)
  for u in objs:
    data = []
    data.append(u.name)
    data.append(auth.name)
    data.append(u.translator)
    data.append(u.press)
    data.append(u.serializer)
    data.append(u.page)
    sheet.append(data)
return ExcelBookResponse(book, filename)
xlwt를 사용하여 데이터 쓰기:

book = xlwt.Workbook()
auths = Auth.objects.filter(owner_id=1)
filename = ' '
for auth in auths:
  sheet = book.add_sheet(sensor.name)
  sheet.write(0, 0, _(" "))
  sheet.write(0, 1, _(" "))
  sheet.write(0, 2, _(" "))
  sheet.write(0, 3, _(" "))
  sheet.write(0, 4, _(" "))
  sheet.write(0, 5, _(" "))
  i = 1
  objs = None
  objs = Book.objects.filter(owner_id=auth.id)
  for u in objs:
    sheet.write(i, 0, u.name)
    sheet.write(i, 1, auth.name)
    sheet.write(i ,2,u.translator)
    sheet.write(i ,3,u.press)
    sheet.write(i, 4, u.serializer)
    sheet.write(i, 5, u.page)
    i += 1
return ExcelBookResponse(book, filename)
XlsxWriter를 사용하여 데이터 쓰기:

book = xlsxwriter.Workbook(output)
auths = Auth.objects.filter(owner_id=1)
for auth in auths:
  sheet = book.add_worksheet(sensor.name)
  header = [
      _(" "),
      _(" "),
      _(" "),
      _(" "),
      _(" "),
      _(" "),
    ]
  sheet.write_row("A1", header)
  objs = Book.objects.filter(owner_id=auth.id)
  i = 1
  for u in objs:
    sheet.write(i, 0, u.name)
    sheet.write(i, 1, auth.name)
    sheet.write(i ,2,u.translator)
    sheet.write(i ,3,u.press)
    sheet.write(i, 4, u.serializer)
    sheet.write(i, 5, u.page)
    i += 1
book.close()
file_ext = 'xlsx'
mimetype = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
# self['Content-Disposition'] = 'attachment; filename*=UTF-8\'\'"{2}.{1}"; filename="{0}.{1}"'.format(filename.replace('"', '\"'), file_ext, urllib.parse.quote(filename.replace('"', '\"'))).encode('utf8')
return HttpResponse(content=output.getvalue(), content_type=mimetype)
양자의 시간 비교(두 가지 방식의 파일 내용은 동일):
openpyxl: 파일 크기는 110.75kb, 평균 시간은 약 570ms
xlwt: 파일 크기는 505.91kb, 평균 시간은 약 440ms
XlsxWrite: 파일 크기는 109.28kb, 평균 시간은 약 500ms
xlwt가 쓰는 줄 수는 제한이 있기 때문에 비교적 큰 파일에 대해 XlsxWrite의 속도는 비교적 빠르다
보충 지식:python excel 파일 쓰기가 너무 느려서 어떻게 해결합니까 -python excel에 대량의 데이터 쓰기
현재 사용되고 있는 Openpyxl은 데이터베이스에서 8W 줄의 데이터를 가져와서 Openpyxl을 통해 excel에 쓰는 데 8분 가까이 걸린다. 이것도 너무 느리다.kettle의 플러그인 초진으로python이 속도를 높일 수 있는 방법이 있습니까,openpyxl을 대량으로 삽입할 수 있습니까,행 효율이 너무 낮습니다.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
from openpyxl import Workbook as wbook
def xlsx(filename, rows_info, sheet='Result'):
if filename and sheet:
wb = wbook()
_sheet = wb.active
_sheet.title = sheet
row = _sheet.max_row
for line in rows_info:
if isinstance(line, str):
row_list = [line]
elif isinstance(line, dict):
row_list = list(line.values())
else:
try:
row_list = list(line)
except:
row_list = []
for col in range(0, len(row_list)):
col_info = row_list[col]
_sheet.cell(row, col + 1, col_info)
row += 1
wb.save(filename)
else:
return ' sheet '
이상의 이python 각종 excel 쓰기 방식의 속도 대비는 바로 편집자가 여러분에게 공유한 모든 내용입니다. 참고 부탁드리고 저희도 많이 사랑해 주세요.

좋은 웹페이지 즐겨찾기