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

如何使用python将大量数据导出到Excel中的小技巧,第1张

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

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

(2)具体步骤如下:

1第一步,安装openpyxl,

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

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

pip install openpyxl==226

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 openpyxlworkbook import Workbook

# ExcelWriter,封装了很强大的excel写的功能

from openpyxlwriterexcel import ExcelWriter

# 一个eggache的数字转为列字母的方法

from openpyxlutils import get_column_letter

from openpyxlreaderexcel 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_objreadlines():

res_listappend(line)

file_objclose()

return res_list

"""

function:

读出xlsx中的每一条记录,把它保存在data_dic中返回

Param:

excel_name: 要读出的文件名

Return:

data_dic: 返回的记录的dict

"""

def read_excel_with_openpyxl(self, excel_name="testexcel2007xlsx"):

# 读取excel2007文件

wb = load_workbook(filename=excel_name)

# 显示有多少张表

print "Worksheet range(s):" , wbget_named_ranges()

print "Worksheet name(s):" , wbget_sheet_names()

# 取第一张表

sheetnames = wbget_sheet_names()

ws = wbget_sheet_by_name(sheetnames[0])

# 显示表名,表行数,表列数

print "Work Sheet Titile:" ,wstitle

print "Work Sheet Rows:" ,wsget_highest_row()

print "Work Sheet Cols:" ,wsget_highest_column()

# 获取读入的excel表格的有多少行,有多少列

row_num=wsget_highest_row()

col_num=wsget_highest_column()

print "row_num: ",row_num," col_num: ",col_num

# 建立存储数据的字典

data_dic = {}

sign=1

# 把数据存到字典中

for row in wsrows:

temp_list=[]

# print "row",row

for cell in row:

print cellvalue,

temp_listappend(cellvalue)

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="savexlsx"):

# 新建一个workbook

wb = Workbook()

# 新建一个excelWriter

ew = ExcelWriter(workbook=wb)

# 设置文件输出路径与名称

dest_filename = save_excel_namedecode('utf-8')

# 第一个sheet是ws

ws = wbworksheets[0]

# 设置ws的名称

wstitle = "range names"

# 写第一行,标题行

for h_x in range(1,len(head_row)+1):

h_col=get_column_letter(h_x)

#print h_col

wscell('%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)

wscell('%s%s' % (col, i))value = '%s' % (record_list[x-1]decode('utf-8'))

i += 1

# 写文件

ewsave(filename=dest_filename)

"""

function:

测试输出Excel内容

读出Excel文件

Param:

excel_name: 要读出的Excel文件名

Return:

"""

def read_excel(self,excel_name):

workbook=xlrdopen_workbook(excel_name)

print workbooksheet_names()

# 获取所有sheet

print workbooksheet_names() # [u'sheet1', u'sheet2']

sheet2_name = workbooksheet_names()[1]

# 根据sheet索引或者名称获取sheet内容

sheet2 = workbooksheet_by_index(1) # sheet索引从0开始

sheet2 = workbooksheet_by_name('Sheet1')

# sheet的名称,行数,列数

print sheet2name,sheet2nrows,sheet2ncols

# 获取整行和整列的值(数组)

rows = sheet2row_values(3) # 获取第四行内容

cols = sheet2col_values(2) # 获取第三列内容

print rows

print cols

# 获取单元格内容

print sheet2cell(1,0)value

print sheet2cell_value(1,0)

print sheet2row(1)[0]value

# 获取单元格内容的数据类型

print sheet2cell(1,0)ctype

# 通过名称获取

return workbooksheet_by_name(u'Sheet1')

"""

function:

设置单元格样式

Param:

name: 字体名字

height: 字体高度

bold: 是否大写

Return:

style: 返回设置好的格式对象

"""

def set_style(self,name,height,bold=False):

style = xlwtXFStyle() # 初始化样式

font = xlwtFont() # 为样式创建字体

fontname = name # 'Times New Roman'

fontbold = bold

fontcolor_index = 4

fontheight = height

borders= xlwtBorders()

bordersleft= 6

bordersright= 6

borderstop= 6

bordersbottom= 6

stylefont = font

styleborders = borders

return style

"""

function:

按照 设置单元格样式 把计算结果由txt转变为Excel存储

Param:

dataset:要保存的结果数据,list存储

Return:

将结果保存为 excel对象中

"""

def write_to_excel(self, dataset,save_excel_name,head_row):

f = xlwtWorkbook() # 创建工作簿

# 创建第一个sheet:

# sheet1

count=1

sheet1 = fadd_sheet(u'sheet1', cell_overwrite_ok=True) # 创建sheet

# 首行标题:

for p in range(len(head_row)):

sheet1write(0,p,head_row[p],selfset_style('Times New Roman',250,True))

default=selfset_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"))):

sheet1write(count,pp,row_list[pp]decode('utf-8'),default)

count+=1

fsave(save_excel_name) # 保存文件

def run_main_save_to_excel_with_openpyxl(self):

print "测试读写2007及以后的excel文件xlsx,以方便写入文件更多数据"

print "1 把txt文件读入到内存中,以list对象存储"

dataset_list=selfread_from_file("test_exceltxt")

'''test use openpyxl to handle EXCEL 2007'''

print "2 把文件写入到Excel表格中"

head_row_label=selfhead_row_labels

save_name="test_openpyxlxlsx"

selfwrite_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=selfread_from_file("test_exceltxt")

'''test use xlwt to handle EXCEL 97-2003'''

print " 5 把文件写入到Excel表格中"

head_row_label=selfhead_row_labels

save_name="test_xlwtxls"

selfwrite_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_excelrun_main_save_to_excel_with_openpyxl()

obj_handle_excelrun_main_save_to_excel_with_xlwt()

'''测试读出文件,注意openpyxl不可以读取xls的文件,xlrd不可以读取xlsx格式的文件'''

#obj_handle_excelread_excel_with_openpyxl("testexcel2003xls") # 错误写法

#obj_handle_excelread_excel_with_openpyxl("testexcel2003xls") # 错误写法

obj_handle_excelread_excel("testexcel2003xls")

obj_handle_excelread_excel_with_openpyxl("testexcel2007xlsx")

这个过程有几个比较麻烦的问题,比如读取日期、读合并单元格内容。下面先看看基本的 *** 作:

首先读一个excel文件,有两个sheet,测试用第二个sheet,sheet2内容如下:

python 对 excel基本的 *** 作如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

# -- coding: utf-8 --

import xlrd

import xlwt

from datetime import date,datetime

def read_excel():

# 打开文件

workbook = xlrdopen_workbook(r'F:\demoxlsx')

# 获取所有sheet

print workbooksheet_names() # [u'sheet1', u'sheet2']

sheet2_name = workbooksheet_names()[1]

# 根据sheet索引或者名称获取sheet内容

sheet2 = workbooksheet_by_index(1) # sheet索引从0开始

sheet2 = workbooksheet_by_name('sheet2')

# sheet的名称,行数,列数

print sheet2name,sheet2nrows,sheet2ncols

# 获取整行和整列的值(数组)

rows = sheet2row_values(3) # 获取第四行内容

cols = sheet2col_values(2) # 获取第三列内容

最近由于经常要用到Excel,需要根据Excel表格中的内容对一些apk进行处理,手动处理很麻烦,于是决定写脚本来处理。首先贴出网上找来的读写Excel的脚本。

1读取Excel(需要安装xlrd):

123456789101112131415161718192021222324#-- coding: utf8 --import xlrd  fname = "reflectxls"bk = xlrdopen_workbook(fname)shxrange = range(bknsheets)try: sh = bksheet_by_name("Sheet1")except: print "no sheet in %s named Sheet1" % fname#获取行数nrows = shnrows#获取列数ncols = shncolsprint "nrows %d, ncols %d" % (nrows,ncols)#获取第一行第一列数据cell_value = shcell_value(1,1)#print cell_value  row_list = []#获取各行数据for i in range(1,nrows): row_data = shrow_values(i) row_listappend(row_data)

2写入Excel(需安装pyExcelerator)

12345678from pyExcelerator import  w = Workbook()  #创建一个工作簿ws = wadd_sheet('Hey, Hades')  #创建一个工作表wswrite(0,0,'bit') #在1行1列写入bitwswrite(0,1,'huang') #在1行2列写入huangwswrite(1,0,'xuan') #在2行1列写入xuanwsave('minixls')  #保存

3再举个自己写的读写Excel的例子

读取reflectxls中的某些信息进行处理后写入minixls文件中。 

1234567891011121314151617181920212223242526272829303132333435363738394041424344#-- coding: utf8 --import xlrdfrom pyExcelerator import   w = Workbook()ws = wadd_sheet('Sheet1') fname = "reflectxls"bk = xlrdopen_workbook(fname)shxrange = range(bknsheets)try: sh = bksheet_by_name("Sheet1")except: print "no sheet in %s named Sheet1" % fname nrows = shnrowsncols = shncolsprint "nrows %d, ncols %d" % (nrows,ncols)  cell_value = shcell_value(1,1)#print cell_value  row_list = []mydata = []for i in range(1,nrows): row_data = shrow_values(i) pkgdatas = row_data[3]split(',') #pkgdatassplit(',') #获取每个包的前两个字段 for pkgdata in pkgdatas:  pkgdata = ''join((pkgdatasplit(''))[:2])  mydataappend(pkgdata) #将列表排序 mydata = list(set(mydata)) print mydata #将列表转化为字符串 mydata = ','join(mydata) #写入数据到每行的第一列 wswrite(i,0,mydata) mydata = [] row_listappend(row_data[3])#print row_list wsave('minixls')

4现在我需要根据Excel文件中满足特定要求的apk的md5值来从服务器获取相应的apk样本,就需要这样做: 

123456789101112131415161718192021222324252627282930313233#--coding:utf8--import xlrdimport osimport shutil  fname = "/excelnamexls"bk = xlrdopen_workbook(fname)shxrange = range(bknsheets)try: #打开Sheet1工作表 sh = bksheet_by_name("Sheet1")except: print "no sheet in %s named Sheet1" % fname#获取行数nrows = shnrows#获取列数ncols = shncols#print "nrows %d, ncols %d" % (nrows,ncols)#获取第一行第一列数据cell_value = shcell_value(1,1)#print cell_value  row_list = []#range(起始行,结束行)for i in range(1,nrows): row_data = shrow_values(i) if row_data[6] == "HXB":  filename = row_data[3]+"apk"  #print "%s %s %s" %(i,row_data[3],filename)  filepath = r"/1/"+filename  print "%s %s %s" %(i,row_data[3],filepath)  if ospathexists(filepath):   shutilcopy(filepath, r"/myapk/")

补充一个使用xlwt3进行Excel文件的写 *** 作。

1234567891011121314151617181920212223242526import xlwt3 if __name__ == '__main__':         datas = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h']]#二维数组    file_path = 'D:\\testxlsx'         wb = xlwt3Workbook()    sheet = wbadd_sheet('test')#sheet的名称为test         #单元格的格式    style = 'pattern: pattern solid, fore_colour yellow; '#背景颜色为**    style += 'font: bold on; '#粗体字    style += 'align: horz centre, vert center; '#居中    header_style = xlwt3easyxf(style)         row_count = len(datas)    col_count = len(datas[0])    for row in range(0, row_count):        col_count = len(datas[row])        for col in range(0, col_count):            if row == 0:#设置表头单元格的格式                sheetwrite(row, col, datas[row][col], header_style)            else:                sheetwrite(row, col, datas[row][col])    wbsave(file_path)

输出的文件内容如下图:

注:以上代码在Python 3x版本测试通过。

好了,python *** 作Excel就这么!些了,简单吧

以上就是关于如何使用python将大量数据导出到Excel中的小技巧全部的内容,包括:如何使用python将大量数据导出到Excel中的小技巧、Python 使用xlwt和xlrd *** 作Excel自动换sheet的问题,如何让每5条数据放到一个sheet里面、python怎么读取excel的数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9408606.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存