栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python操作excel

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python操作excel

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

简单介绍

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

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

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

方法
  1. add_sheet(sheetname,cell_overwrite_ok = False )

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

参数:

  • sheetname - 用于此工作表的名称,因为它将显示在Excel应用程序底部的选项卡中。
  • cell_overwrite_ok - 如果True写入多次,则添加的工作表中的单元格不会引发异常。

返回:

   在Worksheet已添加。

  1. save(filename_or_stream )

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

参数: filename_or_stream

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

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

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

方法
  1. write(r,c,label =’’,style =

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

参数:

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

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

  • 标签 -

    要写入的数据值。

  • 风格 -

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

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

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

案例(一)

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

  1. 实例化xlwt对象
  2. 添加数据表
  3. 数据添加
难点
  1. object_pairs_hook 的传入参数是有序的键值对表,而 object_hook 是无序的dict。并且两个参数都给的话,object_pairs_hook 的优先级要更高。就是给object_pairs_hook的解码的键值对列表是有序的,所以些依赖键值对顺序的功能可以用 object_pairs_hook 参数,而不能用 object_hook 。这里直接传入了OrderedDict,具体可参考知乎
  2. 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:

案例(二)

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

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

student.xls:

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('nt学生信息表nt"d" :[名字, 数学, 语文, 英语]n'))
    students.text = 'nt学生信息表nt"d" :[名字, 数学, 语文, 英语]n'
    students.text = 'n'+str(json.dumps(data, indent=4, ensure_ascii=False))+'n'
    output.write('n' + etree.tounicode(students_xml.getroot()))
    output.close()

if __name__ == '__main__':
    xls2xml('student.xls', 'student.xml')

student.xml



{
    "1": "['张三', 150.0, 120.0, 100.0]",
    "2": "['李四', 90.0, 99.0, 95.0]",
    "3": "['王五', 60.0, 66.0, 68.0]"
}

  • 如有问题敬请参考:
  1. xlwt
  2. CSDN
  3. 知乎
  4. 我的Github
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/220079.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号