python将list写入excel_Python 使用xlwt模块将多行多列数据循环写入excel文档的操作...

本文介绍了如何使用Python的xlwt模块将多行多列数据高效地写入Excel文档,避免内存占用过多的问题。文章通过实例代码展示了如何处理XML文件中的数据,并利用xlwt将数据写入Excel。同时,文章还讨论了openpyxl在处理大量数据时的内存问题,以及解决这个问题所需的lxml库的安装和使用。另外,提到了xlsxwriter库在处理大文件时的内存优化选项。
摘要由CSDN通过智能技术生成

Python 使用xlwt模块将多行多列数据循环写入excel文档的操作,数据,官网,内存,发现,给大家

Python 使用xlwt模块将多行多列数据循环写入excel文档的操作

易采站长站,站长之家为您整理了Python 使用xlwt模块将多行多列数据循环写入excel文档的操作的相关内容。

我就废话不多说了,大家还是直接看代码吧~

#!/usr/bin/python

# -*- coding: utf-8 -*-

import xlwt

import re

def host_regex(dataline):

host_regex = r"(.*?)"

host = re.findall(host_regex, dataline)

if host:

return host[0]

def ip_regex(dataline):

ip_regex = r"(.*?)"

ip = re.findall(ip_regex, dataline)

if ip:

return ip[0]

with open("zbx_export_hosts.xml", "r", encoding="utf8") as f:

lines = f.readlines()

alldatas = []

hostlist = []

iplist = []

for line in lines:

host = host_regex(line)

ip = ip_regex(line)

if host is not None:

hostlist.append(host)

if ip is not None:

iplist.append(ip)

hosts_ip = []

# 构造数据结构,形如:[[a,b],[c,d],...]

multi_list = map(list, zip(hostlist, iplist))

for multi in multi_list:

hosts_ip.append(multi)

workbook = xlwt.Workbook()

worksheet = workbook.add_sheet('test')

# 关键代码

for hi in enumerate(hosts_ip):

for num in range(len(hi[1])):

# 行、列、值

worksheet.write(hi[0], num, hi[1][num])

workbook.save('excelwrite.xls')

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

补充知识:通过python写入xlsx大量数据问题简述

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

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

因此寻求改善,在网上了解后,发现创建xlsx表时,指定write_only参数是openpyxl提供的大数据写入解决方案,以下摘自官网范例,在选择了此参数后,无法通过ws.cell(row=i, column=j).value = ? 的方式复制,只能通过append的方式追加行。关于设置只写cell设置样式,可以直接查看官网

>>> from openpyxl import Workbook

>>> wb = Workbook(write_only=True)

>>> ws = wb.create_sheet()

>>>

>>> # now we'll fill it with 100 rows x 200 columns

>>>

>>> for irow in range(100):

... ws.append(['%d' % i for i in range(200)]) #可以先将一行的数据写在一个list中,直接ws.append(list)

>>> # save the file

>>> wb.save('new_big_file.xlsx') # doctest: +SKIP

不过仅仅按上述范例修改write_only跑数时发现内存占用并没有缓解,再仔细阅读官网说明时才发现这么一句话“When you want to dump large amounts of data make sure you have lxml installed.”原来在openpyxl安装时,并没有把lxml作为强依赖,只是一个可选包,然后查实发现确实服务器上并没有安装lxml包。

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

首先先要装libxml2以及libxslt,因为没有root权限,均为源码安装,且只能安装在用户目录。需要注意的是libxml2在安装时需要--with-python='python安装目录',libxslt安装的时候需要指定libxml2安装目录。

尤其最后的lxml安装也是坑挺多的,主要是指定libxml2和libxslt,安装lxml时先python3 setup.py build_ext -i -I${libxml2includepath} -L${libxml2libpath} -I${libxsltincludepath} -L${libxsltlibpath} ,再python3 setup.py install。

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

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

操作大文件时指定{'constant_memory': True}即可。

filename = 'test.xlsx'

wb = xlsxwriter.Workbook(filename, {'constant_memory': True})

ws = wb.add_worksheet('大文件')

i = 0

data= []

data.append('中文')

data.append(1323)

data.append('abc')

ws.write_row(i, 0, data)

i = i + 1

wb.close() #直接关闭即可,不需要额外save

以上这篇Python 使用xlwt模块将多行多列数据循环写入excel文档的操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持易采站长站。以上就是关于对Python 使用xlwt模块将多行多列数据循环写入excel文档的操作的详细介绍。欢迎大家对Python 使用xlwt模块将多行多列数据循环写入excel文档的操作内容提出宝贵意见

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值