python - 优化超过 300 000 行的 xlsxwriter
问题描述
我的代码在 django/python 中。我正在使用 xlsxwriter,也许这是错误的选择。我对其他插件持开放态度。
我的问题是我必须在 excel 中写入超过 300 000 行,这需要很多时间(几个小时)。我想加速它。
这是我的代码:
def export_all_agent(request):
output = io.BytesIO()
epoch = datetime.now().strftime('_%d-%m-%Y_%H-%M-%S')
filename = "export_all_agent" + str(epoch) + ".xlsx"
workbook = xlsxwriter.Workbook(output, {'in_memory': True})
worksheet = workbook.add_worksheet()
row = 0
col = 0
titles = ['matricule', 'name', 'first name', 'gender', 'birth day', 'status', 'Percentage Worktime',
'job category', 'grade_name', 'etab name', 'etab siret', 'territoire', 'region']
agents = Agent.objects.all()
for i, item in enumerate(titles):
worksheet.write(row, col + i, item)
row += 1
for agent in agents:
worksheet.write(row, 0, agent.matricule)
worksheet.write(row, 1, agent.name)
worksheet.write(row, 2, agent.first_name)
worksheet.write(row, 3, agent.gender)
worksheet.write(row, 4, agent.birth_date)
worksheet.write(row, 5, agent.status)
worksheet.write(row, 6, agent.percentage_woktime)
worksheet.write(row, 7, agent.job_category)
worksheet.write(row, 8, agent.grade_name)
worksheet.write(row, 9, agent.etablissement.name)
worksheet.write(row, 10, agent.etablissement.siret)
worksheet.write(row, 11, agent.etablissement.territoire.name)
worksheet.write(row, 12, agent.etablissement.territoire.region.name)
row += 1
workbook.close()
output.seek(0)
response = HttpResponse(output.read(),
content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
response['Content-Disposition'] = "attachment; filename=" + filename
return response
你看到一些优化它的方法吗?或者我应该改变我的插件吗?
谢谢你的帮助!
解决方案
推荐阅读
- c++ - Spirit X3,如何获取属性类型以匹配规则类型?
- rust - Is there a standard way of cyclically rotating mutable variables in Rust?
- cuda - How to reorder subarrays of fixed size inside a big 1D array in Thrust
- php - php counts on how many attachments in a single email
- android - 如何从扩展函数中的匿名函数访问“this”?
- python - 避免在多个 python 模块中多次导入相同的包
- excel - 如何使用日期变量选择工作表?
- android - 如何将此文件与 firebase 数据库连接?
- html - 角度动画增量和减量触发器不会触发
- docker-compose - 在 Hyperledger Fabric 中的何处包含 core.yaml?