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文件