python各種excel寫(xiě)入方式的速度對(duì)比
經(jīng)過(guò)實(shí)驗(yàn),新建一個(gè)excel表格,該表格擁有7個(gè)sheet,每個(gè)sheet有800條數(shù)據(jù),其中最后一個(gè)sheet為空。
首先使用openpyxl進(jìn)行寫(xiě)入操作,代碼如下:
book = openpyxl.Workbook() auths = Auth.objects.filter(owner_id=1) filename = '導(dǎo)出數(shù)據(jù)' for auth in auths: sheet = book.create_sheet(auth.name, index = 0) sheet.append([ _("書(shū)名"), _("作者"), _("譯者"), _("出版社"), _("序列號(hào)"), _("總頁(yè)數(shù)"), ]) 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寫(xiě)入數(shù)據(jù):
book = xlwt.Workbook() auths = Auth.objects.filter(owner_id=1) filename = '導(dǎo)出數(shù)據(jù)' for auth in auths: sheet = book.add_sheet(sensor.name) sheet.write(0, 0, _("書(shū)名")) sheet.write(0, 1, _("作者")) sheet.write(0, 2, _("譯者")) sheet.write(0, 3, _("出版社")) sheet.write(0, 4, _("序列號(hào)")) sheet.write(0, 5, _("總頁(yè)數(shù)")) 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寫(xiě)入數(shù)據(jù):
book = xlsxwriter.Workbook(output) auths = Auth.objects.filter(owner_id=1) for auth in auths: sheet = book.add_worksheet(sensor.name) header = [ _("書(shū)名"), _("作者"), _("譯者"), _("出版社"), _("序列號(hào)"), _("總頁(yè)數(shù)"), ] 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)
三者的時(shí)間比較(兩種方式的文件內(nèi)容是一樣的):
openpyxl: 文件大小為110.75kb, 平均時(shí)間大約為570ms
xlwt: 文件大小為505.91kb,平均時(shí)間大約為440ms
XlsxWrite: 文件大小為109.28kb,平均時(shí)間大約為500ms
xlwt寫(xiě)入的行數(shù)有限制,因此對(duì)于較大的文件來(lái)說(shuō),XlsxWrite的速度較快一點(diǎn)
補(bǔ)充知識(shí):python寫(xiě)入excel文件太慢如何解決-python往excel寫(xiě)入大量數(shù)據(jù)
目前用的openpyxl,從數(shù)據(jù)庫(kù)獲取8W行的數(shù)據(jù)通過(guò)openpyxl寫(xiě)入excel,要花費(fèi)接近8分鐘,這也太慢了,用kettle的插件秒進(jìn),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寫(xiě)入方式的速度對(duì)比就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 代碼實(shí)現(xiàn)列表的最小公倍數(shù)
這篇文章主要介紹了Python 代碼實(shí)現(xiàn)列表的最小公倍數(shù),代碼實(shí)現(xiàn)了計(jì)算列表中元素的最小公倍數(shù)的功能,包括公式介紹,需要的朋友可以參考一下2021-11-11python 計(jì)算積分圖和haar特征的實(shí)例代碼
今天小編就為大家分享一篇python 計(jì)算積分圖和haar特征的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11Flask創(chuàng)建并運(yùn)行數(shù)據(jù)庫(kù)遷移的實(shí)現(xiàn)過(guò)程
Flask創(chuàng)建并運(yùn)行數(shù)據(jù)庫(kù)遷移的過(guò)程是一個(gè)涉及多個(gè)步驟的操作,旨在幫助開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程中管理數(shù)據(jù)庫(kù)模式的變化,而不需要手動(dòng)地刪除和重建數(shù)據(jù)庫(kù)表,從而避免數(shù)據(jù)丟失,以下是一個(gè)詳細(xì)的步驟說(shuō)明,需要的朋友可以參考下2024-09-09基于Python實(shí)現(xiàn)自動(dòng)掃雷詳解
這篇文章主要介紹了如何利用Python+OpenCV實(shí)現(xiàn)了自動(dòng)掃雷,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定的幫助,需要的可以參考一下2022-01-01django form和field具體方法和屬性說(shuō)明
這篇文章主要介紹了django form和field具體方法和屬性說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-07-07django 創(chuàng)建過(guò)濾器的實(shí)例詳解
這篇文章主要介紹了django 創(chuàng)建過(guò)濾器的實(shí)例詳解的相關(guān)資料,主要說(shuō)明django 創(chuàng)建過(guò)濾器來(lái)統(tǒng)一處理字符串,需要的朋友可以參考下2017-08-08分析PyTorch?Dataloader報(bào)錯(cuò)ValueError:num_samples的另一種可能原因
這篇文章主要介紹了分析PyTorch?Dataloader報(bào)錯(cuò)ValueError:num_samples的另一種可能原因,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02