学习Python的过程中,我们会遇到Excel的读写问题。通过搜索得知,我们可以使用xlwt module将数据写入Excel表格,使用xlrd module从Excel读取数据。那么python如何写入excel呢?一起来了解下吧:
python如何写入excel
1.读取Excel(需要安装xlrd):
#-*- coding: utf8 -*-
import xlrd
fname = "reflect.xls"
bk = xlrd.open_workbook(fname)
shxrange = range(bk.nsheets)
try:
sh = bk.sheet_by_name("Sheet1")
except:
print "no sheet in %s named Sheet1" % fname
#获取行数
nrows = sh.nrows
#获取列数
ncols = sh.ncols
print "nrows %d, ncols %d" % (nrows,ncols)
#获取*行*列数据
cell_value = sh.cell_value(1,1)
#print cell_value
row_list = []
#获取各行数据
for i in range(1,nrows):
row_data = sh.row_values(i)
row_list.append(row_data)
2.写入Excel(需安装pyExcelerator)
from pyExcelerator import *
w = Workbook() #创建一个工作簿
ws = w.add_sheet('Hey, Hades') #创建一个工作表
ws.write(0,0,'bit') #在1行1列写入bit
ws.write(0,1,'huang') #在1行2列写入huang
ws.write(1,0,'xuan') #在2行1列写入xuan
w.save('mini.xls') #保存
3.再举个自己写的读写Excel的例子
读取reflect.xls中的某些信息进行处理后写入mini.xls文件中。
#-*- coding: utf8 -*-
import xlrd
from pyExcelerator import *
w = Workbook()
ws = w.add_sheet('Sheet1')
fname = "reflect.xls"
bk = xlrd.open_workbook(fname)
shxrange = range(bk.nsheets)
try:
sh = bk.sheet_by_name("Sheet1")
except:
print "no sheet in %s named Sheet1" % fname
nrows = sh.nrows
ncols = sh.ncols
print "nrows %d, ncols %d" % (nrows,ncols)
cell_value = sh.cell_value(1,1)
#print cell_value
row_list = []
mydata = []
for i in range(1,nrows):
row_data = sh.row_values(i)
pkgdatas = row_data[3].split(',')
#pkgdatas.split(',')
#获取每个包的前两个字段
for pkgdata in pkgdatas:
pkgdata = '.'.join((pkgdata.split('.'))[:2])
mydata.append(pkgdata)
#将列表排序
mydata = list(set(mydata))
print mydata
#将列表转化为字符串
mydata = ','.join(mydata)
#写入数据到每行的*列
ws.write(i,0,mydata)
mydata = []
row_list.append(row_data[3])
#print row_list
w.save('mini.xls')
4.现在我需要根据Excel文件中满足特定要求的apk的md5值来从服务器获取相应的apk样本,就需要这样做:
#-*-coding:utf8-*-
import xlrd
import os
import shutil
fname = "./excelname.xls"
bk = xlrd.open_workbook(fname)
shxrange = range(bk.nsheets)
try:
#打开Sheet1工作表
sh = bk.sheet_by_name("Sheet1")
except:
print "no sheet in %s named Sheet1" % fname
#获取行数
nrows = sh.nrows
#获取列数
ncols = sh.ncols
#print "nrows %d, ncols %d" % (nrows,ncols)
#获取*行*列数据
cell_value = sh.cell_value(1,1)
#print cell_value
row_list = []
#range(起始行,结束行)
for i in range(1,nrows):
row_data = sh.row_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 os.path.exists(filepath):
shutil.copy(filepath, r"./myapk/")
补充一个使用xlwt3进行Excel文件的写操作。
import xlwt3
if __name__ == '__main__':
datas = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h']]#二维数组
file_path = 'D:\test.xlsx'
wb = xlwt3.Workbook()
sheet = wb.add_sheet('test')#sheet的名称为test
#单元格的格式
style = 'pattern: pattern solid, fore_colour yellow; '#背景颜色为黄色
style += 'font: bold on; '#粗体字
style += 'align: horz centre, vert center; '#居中
header_style = xlwt3.easyxf(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:#设置表头单元格的格式
sheet.write(row, col, datas[row][col], header_style)
else:
sheet.write(row, col, datas[row][col])
wb.save(file_path)
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
import xlsxwriter
'''
pip install xlsxwriter
'''
reload(sys)
sys.setdefaultencoding("utf-8")
# path = os.path.dirname(os.path.abspath(__file__))
# 建立文件
workbook = xlsxwriter.Workbook("text.xlsx")
# 可以制定表的名字
# worksheet = workbook.add_worksheet('text')
worksheet = workbook.add_worksheet()
# 设置列宽
# worksheet.set_column('A:A',10)
# 设置祖体
bold = workbook.add_format({'bold':True})
# 定义数字格式
# money = workbook.add_format({'num_format':'$#,##0'})
# 写入带粗体的数据
worksheet.write('A1','data',bold)
worksheet.write('B1','work')
'''
worksheet.write(0, 0, 'Hello') # write_string()
worksheet.write(1, 0, 'World') # write_string()
worksheet.write(2, 0, 2) # write_number()
worksheet.write(3, 0, 3.00001) # write_number()
worksheet.write(4, 0, '=SIN(PI()/4)') # write_formula()
worksheet.write(5, 0, '') # write_blank()
worksheet.write(6, 0, None) # write_blank()
'''
worksheet.write('A3',15)
worksheet.write('B3',20)
worksheet.write('C3',44)
worksheet.write('D3',36)
# xlsx计算数据
worksheet.write('E3','=SUM(A3:D3)')
'''
建立Chart对象: chart = workbook.add_chart({type, 'column'})
Chart: Area, Bar, Column, Doughnut, Line, Pie, Scatter, Stock, Radar
将图插入到sheet中: worksheet.insert_chart('A7', chart)
'''
# 定义插入的图标样式
chart = workbook.add_chart({"type":'column'})
headings = ['a','b','c']
data = [
[1,2,3,4,5],
[2,4,6,8,10],
[3,6,9,12,15],
]
# 按行插入数据
worksheet.write_row('A4',headings)
# 按列插入数据
worksheet.write_column('A5',data[0])
worksheet.write_column('B5',data[1])
worksheet.write_column('C5',data[2])
# 图行的数据区
# name:代表图例名称;
# categories:是x轴项,也就是类别;
# values:是y轴项,也就是值;
chart.add_series({
'name':'=Sheet1!$B$4',
'categories':'=Sheet1!$A$5:$A$9',
'values':'=Sheet1!$B$5:$B$9',
})
chart.add_series({
'name':['Sheet1', 3, 2],
'categories':['Sheet1', 4, 0, 8, 0],
'values':['Sheet1', 4, 2, 8, 2],
})
# 图形的标题
chart.set_title ({'name': 'Percent Stacked Chart'})
# 图形X轴的说明
chart.set_x_axis({'name': 'Test number'})
# 图形Y轴的说明
chart.set_y_axis({'name': 'Sample length (mm)'})
# 设置图表风格
chart.set_style(11)
# 插入图形,带偏移
worksheet.insert_chart('D12',chart,{'x_offset': 25, 'y_offset': 10})
workbook.close()
Python如何对Excel进行读写
# -*- coding: utf-8 -*-
#导入xlwt模块
import xlwt
# 创建一个Workbook对象,这就相当于创建了一个Excel文件
book = xlwt.Workbook(encoding='utf-8', style_compression=0)
'''
Workbook类初始化时有encoding和style_compression参数
encoding:设置字符编码,一般要这样设置:w = Workbook(encoding='utf-8'),就可以在excel中输出中文了。
默认是ascii。当然要记得在文件头部添加:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
style_compression:表示是否压缩,不常用。
'''
#创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格。
# 在电脑桌面右键新建一个Excel文件,其中就包含sheet1,sheet2,sheet3三张表
sheet = book.add_sheet('test', cell_overwrite_ok=True)
# 其中的test是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格,其实是Worksheet实例化的一个参数,默认值是False
# 向表test中添加数据
sheet.write(0, 0, 'EnglishName') # 其中的'0-行, 0-列'指定表中的单元,'EnglishName'是向该单元写入的内容
sheet.write(1, 0, 'Marcovaldo')
txt1 = '中文名字'
sheet.write(0, 1, txt1.decode('utf-8')) # 此处需要将中文字符串解码成unicode码,否则会报错
txt2 = '马可瓦多'
sheet.write(1, 1, txt2.decode('utf-8'))
# *,将以上操作保存到指定的Excel文件中
book.save(r'e:test1.xls') # 在字符串前加r,声明为raw字符串,这样就不会处理其中的转义了。否则,可能会报错
python如何将数据写入excel
Python中一般使用xlrd(excel read)来读取Excel文件,使用xlwt(excel write)来生成Excel文件(可以控制Excel中单元格的格式),需要注意的是,用xlrd读取excel是不能对其进行操作的:xlrd.open_workbook()方法返回xlrd.Book类型,是只读的,不能对其进行操作。而xlwt.Workbook()返回的xlwt.Workbook类型的save(filepath)方法可以保存excel文件。
因此对于读取和生成Excel文件都非常容易处理,但是对于已经存在的Excel文件进行修改就比较麻烦了。不过,还有一个xlutils(依赖于xlrd和xlwt)提供复制excel文件内容和修改文件的功能。其实际也只是在xlrd.Book和xlwt.Workbook之间建立了一个管道而已。
xlutils.copy模块的copy()方法实现了这个功能,示例代码如下:
from xlrd import open_workbook
from xlutils.copy import copy
rb = open_workbook('m:\1.xls')
#通过sheet_by_index()获取的sheet没有write()方法
rs = rb.sheet_by_index(0)
wb = copy(rb)
#通过get_sheet()获取的sheet有write()方法
ws = wb.get_sheet(0)
ws.write(0, 0, 'changed!')
wb.save('m:\1.xls')
练习代码(通过xlrd 读取 & 写入,再借用copy进行保存):
特别注意:由于copy保存实质上是通过xlwt进行保存的,而实际上xlwt保存的文件。
而通过xlwt只能写入xls文件,不能写入xlsx文件。
import xlrd
from xlwt import *
from xlutils.copy import copy
xlsfile = 'test.xls'
book = xlrd.open_workbook(xlsfile)
sheet_name = book.sheet_names()
print(sheet_name)
sheet = book.sheet_by_index(1)
nrows = sheet.nrows
ncols = sheet.ncols
print(nrows)
print(ncols)
row_data = sheet.row_values(0)
col_data = sheet.col_values(0)
print(row_data)
print(col_data)
cell_value = sheet.cell_value(3,0)
print(cell_value)
cell_value2 = sheet.cell(3,0)
print(cell_value2)
sheet.put_cell(1,2,1,"test",0)
cell_value2 = sheet.cell(1,1)
print(cell_value2)
#保存xlsfile
wb = copy(book)
wb.save(xlsfile)
Python向excel中写入数据
具体代码如下:
#!/usr/bin/env python
# coding=utf-8
from xlwt import *
#需要xlwt库的支持
#import xlwt
file = Workbook(encoding = 'utf-8')
#指定file以utf-8的格式打开
table = file.add_sheet('data')
#指定打开的文件名
data = {
"1":["张三",150,120,100],
"2":["李四",90,99,95],
"3":["王五",60,66,68]
}
#字典数据
ldata = []
num = [a for a in data]
#for循环指定取出key值存入num中
num.sort()
#字典数据取出后无需,需要先排序
for x in num:
#for循环将data字典中的键和值分批的保存在ldata中
t = [int(x)]
for a in data[x]:
t.append(a)
ldata.append(t)
for i,p in enumerate(ldata):
#将数据写入文件,i是enumerate()函数返回的序号数
for j,q in enumerate(p):
# print i,j,q
table.write(i,j,q)
file.save('data.xlsx')