使用python将大量数据导出到Excel中的小技巧分享

(1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢?

本文主要解决以上两个问题。

(2)具体步骤如下:

1.第一步,安装openpyxl,

使用pip install openpyxl即可,但是在windows下安装的是2.2.6版本,但是centos自动安装的是4.1版本,(多谢海哥的提醒)。

写的代码在windows下运行没问题,但centos上却报错了,说是ew=ExcelWriter(workbook=wb)少提供一个参数,于是果断在 237服务器上我已安装2.2.6版本的,问题解决。

pip install openpyxl==2.2.6

2.第二步,哈哈,没有啦,废话不说了,直接上代码,ps,代码中包含xlwt和openpyxl的两个实现版本。

(3)扩展阅读:通过查阅资料,发现网上众说纷纭,总结起来有如下几点:

python Excel相关的操作的module lib有两组,一组是xlrd、xlwt、xlutils,另一组是openpyxl,

但是前一组(xlrd,xlwt)比较老,只能处理由Excel 97-2003 或者Excel 97 以前版本生成的xls格式的excel文件,xlwt甚至不支持07版以后的excel ,这个格式excel文件一般来说,最大只能支持256列或者65536行的excel文件。

因此面对需要导出大量数据到excel的情况,你将有如下三种选择,

(1) 换一种存储格式,如保存为CSV文件

(2) 使用openpyxl—,因为它支持对Excel 2007+ xlsx/xlsm format的处理

(3) win32 COM (Windows only)

当然,我们要直面困难了,为了更好地展示数据给产品和用户,我们依然选择的第二种。

ps,非常lucky,一番搜索后我找到了openpyxl,支持07+的excel,一直有人在维护,文档清晰易读,参照Tutorial和API文档很快就能上手,就是它了~

(4) 闲话少说,直接上代码,敬请参考

# coding:utf-8
'''
# 希望对大家有帮助哈,请多提问题
create by yaoyz
date: 2017/01/24
'''
import xlrd
import xlwt
# workbook相关
from openpyxl.workbook import Workbook
# ExcelWriter,封装了很强大的excel写的功能
from openpyxl.writer.excel import ExcelWriter
# 一个eggache的数字转为列字母的方法
from openpyxl.utils import get_column_letter
from openpyxl.reader.excel import load_workbook
class HandleExcel():
 '''Excel相关操作类'''
 def __init__(self):
  self. head_row_labels = [u'学生ID',u'学生姓名',u'联系方式',u'知识点ID',u'知识点名称']
 """
  function:
   读出txt文件中的每一条记录,把它保存在list中
  Param:
   filename: 要读出的文件名
  Return:
   res_list: 返回的记录的list
 """
 def read_from_file(self,filename):
  res_list=[]
  file_obj=open(filename,"r")
  for line in file_obj.readlines():
   res_list.append(line)
  file_obj.close()
  return res_list
 """
  function:
   读出*.xlsx中的每一条记录,把它保存在data_dic中返回
  Param:
   excel_name: 要读出的文件名
  Return:
   data_dic: 返回的记录的dict
 """
 def read_excel_with_openpyxl(self, excel_name="testexcel2007.xlsx"):
  # 读取excel2007文件
  wb = load_workbook(filename=excel_name)
  # 显示有多少张表
  print "Worksheet range(s):" , wb.get_named_ranges()
  print "Worksheet name(s):" , wb.get_sheet_names()
  # 取第一张表
  sheetnames = wb.get_sheet_names()
  ws = wb.get_sheet_by_name(sheetnames[0])
  # 显示表名,表行数,表列数
  print "Work Sheet Titile:" ,ws.title
  print "Work Sheet Rows:" ,ws.get_highest_row()
  print "Work Sheet Cols:" ,ws.get_highest_column()
  # 获取读入的excel表格的有多少行,有多少列
  row_num=ws.get_highest_row()
  col_num=ws.get_highest_column()
  print "row_num: ",row_num," col_num: ",col_num
  # 建立存储数据的字典
  data_dic = {}
  sign=1
  # 把数据存到字典中
  for row in ws.rows:
   temp_list=[]
   # print "row",row
   for cell in row:
     print cell.value,
     temp_list.append(cell.value)
   print ""
   data_dic[sign]=temp_list
   sign+=1
  print data_dic
  return data_dic
 """
  function:
   读出*.xlsx中的每一条记录,把它保存在data_dic中返回
  Param:
   records: 要保存的,一个包含每一条记录的list
   save_excel_name: 保存为的文件名
   head_row_stu_arrive_star:
  Return:
   data_dic: 返回的记录的dict
 """
 def write_to_excel_with_openpyxl(self,records,head_row,save_excel_name="save.xlsx"):
  # 新建一个workbook
  wb = Workbook()
  # 新建一个excelWriter
  ew = ExcelWriter(workbook=wb)
  # 设置文件输出路径与名称
  dest_filename = save_excel_name.decode('utf-8')
  # 第一个sheet是ws
  ws = wb.worksheets[0]
  # 设置ws的名称
  ws.title = "range names"
  # 写第一行,标题行
  for h_x in range(1,len(head_row)+1):
   h_col=get_column_letter(h_x)
   #print h_col
   ws.cell('%s%s' % (h_col, 1)).value = '%s' % (head_row[h_x-1])
  # 写第二行及其以后的那些行
  i = 2
  for record in records:
   record_list=str(record).strip().split("\t")
   for x in range(1,len(record_list)+1):
    col = get_column_letter(x)
    ws.cell('%s%s' % (col, i)).value = '%s' % (record_list[x-1].decode('utf-8'))
   i += 1
  # 写文件
  ew.save(filename=dest_filename)
 """
  function:
   测试输出Excel内容
   读出Excel文件
  Param:
   excel_name: 要读出的Excel文件名
  Return:
   无
 """
 def read_excel(self,excel_name):
  workbook=xlrd.open_workbook(excel_name)
  print workbook.sheet_names()
  # 获取所有sheet
  print workbook.sheet_names() # [u'sheet1', u'sheet2']
  sheet2_name = workbook.sheet_names()[1]
  # 根据sheet索引或者名称获取sheet内容
  sheet2 = workbook.sheet_by_index(1) # sheet索引从0开始
  sheet2 = workbook.sheet_by_name('Sheet1')
  # sheet的名称,行数,列数
  print sheet2.name,sheet2.nrows,sheet2.ncols
  # 获取整行和整列的值(数组)
  rows = sheet2.row_values(3) # 获取第四行内容
  cols = sheet2.col_values(2) # 获取第三列内容
  print rows
  print cols
  # 获取单元格内容
  print sheet2.cell(1,0).value
  print sheet2.cell_value(1,0)
  print sheet2.row(1)[0].value
  # 获取单元格内容的数据类型
  print sheet2.cell(1,0).ctype
  # 通过名称获取
  return workbook.sheet_by_name(u'Sheet1')
 """
  function:
   设置单元格样式
  Param:
   name: 字体名字
   height: 字体高度
   bold: 是否大写
  Return:
   style: 返回设置好的格式对象
 """
 def set_style(self,name,height,bold=False):
  style = xlwt.XFStyle() # 初始化样式
  font = xlwt.Font() # 为样式创建字体
  font.name = name # 'Times New Roman'
  font.bold = bold
  font.color_index = 4
  font.height = height
  borders= xlwt.Borders()
  borders.left= 6
  borders.right= 6
  borders.top= 6
  borders.bottom= 6
  style.font = font
  style.borders = borders
  return style
 """
  function:
   按照 设置单元格样式 把计算结果由txt转变为Excel存储
  Param:
   dataset:要保存的结果数据,list存储
  Return:
   将结果保存为 excel对象中
 """
 def write_to_excel(self, dataset,save_excel_name,head_row):
  f = xlwt.Workbook() # 创建工作簿
  # 创建第一个sheet:
  # sheet1
  count=1
  sheet1 = f.add_sheet(u'sheet1', cell_overwrite_ok=True) # 创建sheet
  # 首行标题:
  for p in range(len(head_row)):
    sheet1.write(0,p,head_row[p],self.set_style('Times New Roman',250,True))
  default=self.set_style('Times New Roman',200,False) # define style out the loop will work
  for line in dataset:
   row_list=str(line).strip("\n").split("\t")
   for pp in range(len(str(line).strip("\n").split("\t"))):
    sheet1.write(count,pp,row_list[pp].decode('utf-8'),default)
   count+=1
  f.save(save_excel_name) # 保存文件
 def run_main_save_to_excel_with_openpyxl(self):
  print "测试读写2007及以后的excel文件xlsx,以方便写入文件更多数据"
  print "1. 把txt文件读入到内存中,以list对象存储"
  dataset_list=self.read_from_file("test_excel.txt")
  '''test use openpyxl to handle EXCEL 2007'''
  print "2. 把文件写入到Excel表格中"
  head_row_label=self.head_row_labels
  save_name="test_openpyxl.xlsx"
  self.write_to_excel_with_openpyxl(dataset_list,head_row_label,save_name)
  print "3. 执行完毕,由txt格式文件保存为Excel文件的任务"
 def run_main_save_to_excel_with_xlwt(self):
  print " 4. 把txt文件读入到内存中,以list对象存储"
  dataset_list=self.read_from_file("test_excel.txt")
  '''test use xlwt to handle EXCEL 97-2003'''
  print " 5. 把文件写入到Excel表格中"
  head_row_label=self.head_row_labels
  save_name="test_xlwt.xls"
  self.write_to_excel_with_openpyxl(dataset_list,head_row_label,save_name)
  print "6. 执行完毕,由txt格式文件保存为Excel文件的任务"
if __name__ == '__main__':
 print "create handle Excel Object"
 obj_handle_excel=HandleExcel()
 # 分别使用openpyxl和xlwt将数据写入文件
 obj_handle_excel.run_main_save_to_excel_with_openpyxl()
 obj_handle_excel.run_main_save_to_excel_with_xlwt()
 '''测试读出文件,注意openpyxl不可以读取xls的文件,xlrd不可以读取xlsx格式的文件'''
 #obj_handle_excel.read_excel_with_openpyxl("testexcel2003.xls") # 错误写法
 #obj_handle_excel.read_excel_with_openpyxl("testexcel2003.xls") # 错误写法
 obj_handle_excel.read_excel("testexcel2003.xls")
 obj_handle_excel.read_excel_with_openpyxl("testexcel2007.xlsx")

以上这篇使用python将大量数据导出到Excel中的小技巧分享就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Python将列表数据写入文件(txt, csv,excel)

    写入txt文件 def text_save(filename, data):#filename为写入CSV文件的路径,data为要写入数据列表. file = open(filename,'a') for i in range(len(data)): s = str(data[i]).replace('[','').replace(']','')#去除[],这两行按数据不同,可以选择 s = s.replace("'",'').replace(',','') +'\n' #去除单引号,

  • python list格式数据excel导出方法

    如下所示: # _*_ coding:utf-8 _*_ #----------------------------------------------- # import modules #----------------------------------------------- import os import xlwt import sys import types def set_style(name, height, bold = False): style = xlwt.XFSt

  • python 数据生成excel导出(xlwt,wlsxwrite)代码实例

    这篇文章主要介绍了python 数据生成excel导出(xlwt,wlsxwrite)代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 话不多说,看代码: from xlwt import * import StringIO from apps.song.models import Song def excel_ktvsong(request):
 """
导出excel表格
"""
 _

  • python实现数据导出到excel的示例--普通格式

    此文是在django框架下编写,从数据库中获取数据使用的是django-orm 用python导出数据到excel,简单到爆!(普通的excel格式) 安装xlwt pip install xlwt 编写py文件 from xlwt import * import StringIO from apps.song.models import Song def excel_ktvsong(request):
 """
导出excel表格
"""
 _

  • python实现数据写入excel表格

    本文实例为大家分享了python数据写入excel表格的具体代码,供大家参考,具体内容如下 安装: xlsxwriter第三方库 code: #!/usr/bin/env/python #_*_coding:utf-8_*_ #Data:2017-08-13 #Auther:苏莫 #Link:http://blog.csdn.net/lingluofengzang #PythonVersion:python2.7 #filename:xlsx.py import sys # import os

  • Python向excel中写入数据的方法

    最近做了一项工作需要把处理的数据写入到Excel表格中进行保存,所以在此就简单介绍使用Python如何把数据保存到excel表格中. 数据导入之前需要安装 xlwt依赖包,安装的方法就很简单,直接 pip install xlwt ,如果电脑中安装过就不需要重复安装. 接下来就做一个简单的demo ,把三行数据添加到excel中. 具体代码如下: #!/usr/bin/env python # coding=utf-8 from xlwt import * #需要xlwt库的支持 #import

  • python读取excel指定列数据并写入到新的excel方法

    如下所示: #encoding=utf-8 import xlrd from xlwt import * #------------------读数据--------------------------------- fileName="C:\\Users\\st\\Desktop\\test\\20170221131701.xlsx" bk=xlrd.open_workbook(fileName) shxrange=range(bk.nsheets) try: sh=bk.sheet

  • Python实现将数据库一键导出为Excel表格的实例

    数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果 依赖 由于是Python实现的,所以需要有Python环境的支持 Python2.7.11 我的Python环境是2.7.11.虽然你用的可能是3.5版本,但是思想是一致的. xlwt pip install xlwt MySQLdb pip install MySQLdb 如果上述方式不成功的话,可以到sourceforge官网上去下载windows

  • 使用python将大量数据导出到Excel中的小技巧分享

    (1) 问题描述:为了更好地展示数据,Excel格式的数据文件往往比文本文件更具有优势,但是具体到python中,该如何导出数据到Excel呢?如果碰到需要导出大量数据又该如何操作呢? 本文主要解决以上两个问题. (2)具体步骤如下: 1.第一步,安装openpyxl, 使用pip install openpyxl即可,但是在windows下安装的是2.2.6版本,但是centos自动安装的是4.1版本,(多谢海哥的提醒). 写的代码在windows下运行没问题,但centos上却报错了,说是e

  • DataTable数据导出成Excel文件的小例子

    复制代码 代码如下: /// /// 将DataTable中的数据导出到指定的Excel文件中 /// /// Web页面对象 /// 包含被导出数据的DataTable对象 /// Excel文件的名称public static void Export(System.Web.UI.Page page,System.Data.DataTable tab,string FileName) { System.Web.HttpResponse httpResponse = page.Response;

  • asp中把数据导出为excel的2种方法

    我们在做项目的时候经常要将数据库的数据导出到excel中,很多asp用户并不知道怎么写. 这里明凯总结了两种方法来导出excel,希望能帮到大家. 方法一:用excel组件 < % set rs=server.createobject("adodb.recordset") sql="select * from mkusers" rs.open sql,objconn,1,1 Set ExcelApp =CreateObject("Excel.Appl

  • python技能之数据导出excel的实例代码

    本文介绍了python技能之导出excel的实例代码,正好能用到,写出来分享给大家 作为一个数据分析师,下面的需求是经常会遇到的. 从数据库或者现有的文本文件中提取符合要求的数据,做一个二次处理,处理完成后的数据最终存储到excel表格中供其他部门的人继续二次分析. 在这里Excel作为一个必不可少桥梁,合适的工具和方法可以避免我们将处理完的数据耗费时间一行行复制黏贴过去. python编程也是一个数据分析师的必备技能,你永远无法预料你的数据会来自哪里,需要经过怎样复杂的过滤,筛选,排序,组合处

  • python脚本实现数据导出excel格式的简单方法(推荐)

    实习期间,服务器的一位师兄让我帮忙整理一下服务器的log数据,最终我用Python实现了数据的提取并将其用Excel格式导出.下面是我Python实现的源码,可以自动遍历某一文件目录下的所有文本文件,并将总的数据导出到Excel文件中,导出为Excel格式这样就比较方便统计了. //实现将目录下所有文件格式为.txt的文件进行遍历统计,如果是别的格式直接将下面的.txt改为你所需要的格式后缀就可以了,比较方便. //过程就是先将所有的文件中的内容提取出来写入到一个新文件中,然后再从新文件中提取数

  • 通过剪贴板实现将DataGridView中的数据导出到Excel

    将DataGridView中的数据导出到Excel中有许多方法,常见的方法是使用Office COM组件将DataGridView中的数据循环复制到Excel Cell对象中,然后再保存整个Excel Workbook.但是如果数据量太大,例如上万行数据或者有多个Excel Sheet需要同时导出,效率会比较低.可以尝试使用异步操作或多线程的方式来解决UI死锁的问题. 这里介绍一种直接通过Windows剪贴板将数据从DataGridView导出到Excel的方法.代码如下: 复制代码 代码如下:

  • java web将数据导出为Excel格式文件代码片段

    本文实例为大家分享了java web将数据导出为Excel格式文件的具体代码,供大家参考,具体内容如下 1.jsp代码 <input type="button" class="btn btn-info" onclick="getVerExcel();" value="导出为Excel文件" /> 2.js代码 function getVerExcel() { window.location.href = '/pms

  • Grid或者DataTable中数据导出为Excel原来这么简单

    以前一直认为,将Grid 或者DataTable中的数据导出到Excel功能实现会非常复杂,可能会想用什么类库什么的或者实在太难就用csv算了. 看了FineUI中的将Grid导出为Excel的实现方法,实际上是可以非常简单.看来很难的问题,变换一种思路就可以非常简单. 1. Aspx后台代码输出Content Type信息 复制代码 代码如下: Response.ClearContent(); Response.AddHeader("content-disposition", &qu

  • Dwz与thinkphp整合下的数据导出到Excel实例

    本文实例讲述了Dwz与thinkphp整合下的数据导出到Excel的方法.分享给大家供大家参考.具体方法如下: 这个问题困扰了我很久,终于还是自己写JQUERY把它搞掂了,希望能对遇到同样问题的人有所帮助,好吧,下面就是源代码: jquery代码如下: 复制代码 代码如下: $(function(){            //_getIds方法就是获取已选的要导出的数据的ID,设了两个参数selectedIds--已选id的input名称,targetType-->碎片模式,默认是navTab

随机推荐