Python利用xlwt模块实现将数据写入excel文件

  

Python利用xlwt模块实现将数据写入excel文件?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

# !/usr/bin/Python   # - * -编码:utf - 8 - *      进口xlwt   进口再保险      def host_regex (dataline):   host_regex=r" & lt; host>(。*和# 63;)& lt;/host>“   主机=re.findall (host_regex dataline)   如果主机:   返回主机[0]      def ip_regex (dataline):   ip_regex=r" & lt; ip>(。*和# 63;)& lt;/ip>“   ip=re.findall (ip_regex dataline)   如果知识产权:   返回的ip [0]      打开(“zbx_export_hosts.xml",“r",编码=皍tf8") f:   行=f.readlines ()   alldata=[]   hostlist=[]   iplist=[]   线的线:   主机=host_regex(线)   ip=ip_regex(线)      如果主机不是没有:   hostlist.append(主机)   如果ip不是没有:   iplist.append (ip)   hosts_ip=[]   #构造数据结构,形如:[[a, b], [c, d]…]   multi_list=地图(列表,zip (hostlist iplist))   在multi_list多:   hosts_ip.append(多)   工作簿=xlwt.Workbook ()   工作表=workbook.add_sheet(& # 39;测试# 39;)   #关键代码   嗨在列举(hosts_ip):   num的范围(len(嗨[1])):   #行、列值   工作表。写(嗨[0],num嗨[1][num])      workbook.save (& # 39; excelwrite.xls& # 39;)

PS:其实有两行代码冗余,就不删了!

<强>通过python写入xlsx大量数据问题简述

以前批处理生成数据文件都是通过c程序直接按照逗号分隔方式写文本文件以csv保存的。但是由于有些处理的数据表直接给业务人员看,业务人员习惯使用xls,因此提了些需求改造,对于一些小于100 w的数据均要求改为xlsx文件格式的报表。

考虑报表文件数据处理便捷,因此决定用python实现,最初使用了openpyxl库,这个python库拥有非常强大的xlsx的读写api,能够很方便的实现读写。但是在实际使用中发现在处理较大行数的xlsx时,占用内存非常严重,8个字段50 w行数据在运行中内存高达10 g,这不是我们应用服务器能够接受的范围。

因此寻求改善,在网上了解后,发现创建xlsx表时,指定write_only参数是openpyxl提供的大数据写入解决方案,以下摘自官网范例,在选择了此参数后,无法通过ws。细胞(行=我列=j)。值=https://www.yisu.com/zixun/?的方式复制,只能通过附加的方式追加行。关于设置只写单元设置样式,可以直接查看官网

在祝辞祝辞从openpyxl进口工作簿   在在在世行=工作簿(write_only=True)   在在在ws=wb.create_sheet ()   在在在   在在在# # 39;现在我们会装满100行x 200列   在在在   在在在irow的范围(100):   …ws.append ([& # 39; % d # 39;%我的范围内(200)])#可以先将一行的数据写在一个列表中,直接ws.append(列表)   在在在#保存文件   在在在wb.save (& # 39; new_big_file.xlsx& # 39;) # doctest: +跳过

不过仅仅按上述范例修改write_only跑数时发现内存占用并没有缓解,再仔细阅读官网说明时才发现这么一句话“当你想把大量数据确保您已经安装了lxml。”原来在openpyxl安装时,并没有把lxml作为强依赖,只是一个可选包,然后查实发现确实服务器上并没有安装lxml包。

于是与为了解决这个问题先在测试环境上安装lxml,安装过程也不是很顺利。

首先先要装libxml2以及libxslt,因为没有根权限,均为源码安装,且只能安装在用户目录。需要注意的是libxml2在安装时需要,与python=& # 39; python安装目录& # 39;,libxslt安装的时候需要指定libxml2安装目录。

尤其最后的lxml安装也是坑挺多的,主要是指定libxml2和libxslt,安装lxml时先python3设置。py build_ext -我-我$ {libxml2includepath} - l $ {libxml2libpath} - $ {libxsltincludepath} - l $ {libxsltlibpath},再python3设置。py安装。

全部安装完之后,确实openpyxl写xlsx不再增加内存,先在tmp目录一个临时文件中写,待调用保存方法时,保存到正式文件。

此外在这个问题解决中,还了解到writexlsx库也可以处理大文件xlsx的写入,并且安装没有这么多的依赖,其实还是非常推荐,也很简介,官网有介绍。

操作大文件时指定{& # 39;constant_memory& # 39;:真正}即可。

文件名=& # 39;test.xlsx& # 39;
  世行=xlsxwriter。工作簿(文件名,{& # 39;constant_memory& # 39;:真正})
  ws=wb.add_worksheet(& # 39;大文件& # 39;)
  我=0
  data=https://www.yisu.com/zixun/[]
  data.append(“中文”)
  data.append (1323)
  data.append (' abc ')
  ws。write_row(0,我数据)
  我+ 1=wb.close() #直接关闭即可,不需要额外保存

Python利用xlwt模块实现将数据写入excel文件