python处理excel实例-python操作excel

python提供了第三方库xlwt用以操作excel表格

简单介绍

简单介绍一下使用,不想看可以直接跳到最后看案例

class xlwt.Workbook.Workbook(encoding ='ascii',style_compression = 0 )

这是一个表示工作簿及其所有内容的类。使用xlwt创建Excel文件时,通常首先要实例化此类的对象。

方法

add_sheet(sheetname,cell_overwrite_ok = False )

此方法用于在工作簿中创建工作表。

参数:

sheetname - 用于此工作表的名称,因为它将显示在Excel应用程序底部的选项卡中。

cell_overwrite_ok - 如果True写入多次,则添加的工作表中的单元格不会引发异常。

返回:

save(filename_or_stream )

此方法用于将工作簿保存为本机Excel格式的文件。

参数: filename_or_stream

这可以是包含文件文件名的字符串,在这种情况下,使用提供的名称将excel文件保存到磁盘。它也可以是具有write方法的流对象,例如a StringIO,在这种情况下,excel文件的数据被写入流。

class xlwt.Worksheet.Worksheet(sheetname,parent_book,cell_overwrite_ok = False )

这是一个表示工作簿中工作表内容的类。

方法

write(r,c,label ='',style = )

此方法用于将单元格写入a Worksheet。

参数:

r - 应写入单元格的工作表中行的零相对数。

c - 工作表中应写入单元格的列的零相对数。

标签 -

要写入的数据值。

风格 -

样式(也称为XF(扩展格式))是一个 XFStyle对象,它封装应用于单元格及其内容的格式。

XFStyle最好使用该easyxf()功能设置对象 。它们也可以通过在设置属性设置Alignment,Borders, Pattern,Font和Protection对象然后设置这些对象和一个格式字符串作为属性 XFStyle对象。

大致了解到这里就能够做基本的使用了,下面看我们案例

案例(一)

这里的案例主要实现把txt文本中的数据读取后添加到excel中,调用了第三方库xlwt和OrderedDict,首先判断文件类型,通过则继续下一步操作,文件转换流程:

实例化xlwt对象

添加数据表

数据添加

难点

object_pairs_hook 的传入参数是有序的键值对表,而 object_hook 是无序的dict。并且两个参数都给的话,object_pairs_hook 的优先级要更高。就是给object_pairs_hook的解码的键值对列表是有序的,所以些依赖键值对顺序的功能可以用 object_pairs_hook 参数,而不能用 object_hook 。这里直接传入了OrderedDict,具体可参考知乎

write方法中的r和c参数,对应的是excel中零行、列所在位置,开始也一直很懵,看了下网上的案例,大概明白一些,这里和列表的处理很类似,0就代表了第一项,比如这里参数顺序是(0,1,...),即时第一行第二列的位置,可以用下标循环进行全部数据添加,下面上代码

student.txt(原txt文本)

{

"1":["张三",150,120,100],

"2":["李四",90,99,95],

"3":["王五",60,66,68]

}

json2excel.py

from collections import OrderedDict

import xlwt, json

def json2excel(inputFile, outputFile):

if inputFile.split('.')[1] != 'txt':

print('please input .txt file!')

return

with open(inputFile, 'r') as f:

data = json.load(f, object_pairs_hook=OrderedDict)

#创建实例

wb = xlwt.Workbook()

#添加sheet

ws = wb.add_sheet('student', cell_overwrite_ok=True)

#注意这里的index和后面的i,不要混淆

for index, (key, values) in enumerate(data.items()):

#给excel的第一列的每一行添加序号

ws.write(index, 0, key)

#给excel的第二列开始的之后每一列的每一行添加数据

for i, value in enumerate(values):

ws.write(index, i+1, value)

wb.save(outputFile)

if __name__ == '__main__':

json2excel('student.txt', 'student.xls')

student.xls:

9719101a1c09

image.png

案例(二)

第一个案例熟悉了的话这类对象间的数据处理应该都不成问题,接下来我们来看另一种类型,数据里面就是简单的数组,这里相对之前的就要简单一些,直接遍历然后写入即可,主要用于熟悉一下行列规则

numbers.txt

[

[1, 82, 65535],

[20, 90, 13],

[26, 809, 1024]

]

json2excel-list.py

from collections import OrderedDict

import xlwt, json

def json2excel(inputFile, outputFile):

if inputFile.split('.')[1] != 'txt':

print('please input .txt file!')

return

with open(inputFile, 'r') as f:

data = json.load(f, object_pairs_hook=OrderedDict)

# 创建实例

wb = xlwt.Workbook()

# 添加sheet

ws = wb.add_sheet('numbers', cell_overwrite_ok=True)

for row in range(len(data)):

for col in range(len(data[row])):

ws.write(row, col, data[row][col])

wb.save(outputFile)

if __name__ == '__main__':

json2excel('numbers.txt', 'numbers.xls')

9719101a1c09

image.png

python也有提供相应的创建处理excel和xml的转化,主要用到xlrd这个库,xml的学习小编没有设计,这里贴出参考的github上的原版实例供大家学习参考,也可以直接参考源地址

student.xls:

9719101a1c09

image.png

excel2xml.py

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

import xlrd, codecs, json

from lxml import etree

from collections import OrderedDict

def xls2xml(filename, outfile):

with xlrd.open_workbook(filename) as excel:

#table = excel.sheet_by_name('student')

table = excel.sheet_by_index(0)

data = OrderedDict()

for i in range(table.nrows):

key = str(int(table.row_values(i)[0]))

value = str(table.row_values(i)[1:])

data[key] = value

output = codecs.open(outfile, 'w', 'utf-8')

root = etree.Element('root')

students_xml = etree.ElementTree(root)

students = etree.SubElement(root, 'students')

students.append(etree.Comment(' 学生信息表 "d" :[名字, 数学, 语文, 英语] '))

students.text = ' 学生信息表 "d" :[名字, 数学, 语文, 英语] '

students.text = ' '+str(json.dumps(data, indent=4, ensure_ascii=False))+' '

output.write('<?xml version="1.0" encoding="UTF-8"?> ' + etree.tounicode(students_xml.getroot()))

output.close()

if __name__ == '__main__':

xls2xml('student.xls', 'student.xml')

student.xml

<?xml version="1.0" encoding="UTF-8"?>

{

"1": "['张三', 150.0, 120.0, 100.0]",

"2": "['李四', 90.0, 99.0, 95.0]",

"3": "['王五', 60.0, 66.0, 68.0]"

}

如有问题敬请参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值