zoukankan      html  css  js  c++  java
  • python Excel读写操作

    背景

    在数据的存储上,习惯使用txt,json或者数据库,但是如果友好地存储,对外提供,则还是基于Excel显示。如果是简单的字符串,或许会选择cvs,默认使用,作为分割,可以存储为txt,生成文件后修改后缀,但cvs有一个比较坑的地方,使用英文逗号,进行分割。如果处理的字符串中有逗号,或者字符串分行,是没有办法处理的。这种情况下,必须使用Excel。在JAVA中使用POI库对Excel进行操作,在python中使用openpyxl进行操作,版本2007以上的Excel,后缀xlsx。

    几种python Excel操作库比较

    openpyxl可以友好的实现对文件的追加写入

    xlrd,xlwt,pandons 如果不断打开文档写入,会发现是不断在覆盖上次记录,最终还是一条记录。如果做一次性写入若干数据,则可以。如果需要不断打开文档追加,不能实现。

    openpyxl写操作

    可以参考鄙人的脚本,路径 https://github.com/CaesarLinsa/shell/blob/master/linux/diff_changes_to_excel.sh,将数据多次写入Excel中。

    a.创建Excel文件

    from  openpyxl import Workbook
    wb = Workbook() # Excel对象
    sheet = wb.active # sheet一个sheet页操作对象
    sheet.title="caesar" #新建一个sheet页命名为"caesar"

    b.写入数据

    sheet.cell(1,1,"caesar") # 向第一行第一列的Excel单元格中写入"caesar"
    

    c.保存Excel

    wb.save("caesar.xlsx")# 以上sheet页命名及数据存入caesar.xlsx中
    

    d.Excel追加 

     在追加Excel时,先要加载Excel,计算出当前sheet中已经使用多上行,从哪一行开始存入数据。

      1.加载Excel 

    wb=openpyxl.load_workbook("caesar.xlsx")
    

      2. 获取sheet对象,并计算行数,写入数据

    sheet=wb.worksheets[0]
    rows=sheet.max_row
    sheet.cell(rows+1, 1, 'Marcovaldo')# 像开始行的第一列写入“Marcovaldo”
    

    openpyxl读操作

    行列读取

    sheet.rows为生成器, 里面是每一行的数据,每一行又是一个tuple。
    sheet.columns类似,里面是每个tuple是每一列的单元格。
    如果需要获取某一行或列的数据,需要在外部定义计数器,获取到那一行时,遍历其中每个cell

    for row in sheet.rows:
        for cell in row:
            print(cell.value)
    
    # A1, A2, A3这样的顺序
    for column in sheet.columns:
        for cell in column:
            print(cell.value)
    

    单元格读取

    在读前,确保行列都小于等于最大的行数和列数,否则会报错,而不是返回None

    >>> d=sheet.cell(row=2, column =1)
    >>> print d
    <Cell u'caesar'.A2>
    >>> d.value
    u'+++ ceilometer-10.0.1/AUTHORS	2018-06-14 23:58:01.000000000 +1000
    '
    >>>
  • 相关阅读:
    数据库连接池系列之——c3p0
    spring配置
    flume ng系列之——flume安装
    flume ng之组件介绍
    flume ng之TailSource
    Flume-NG + HDFS + HIVE日志收集分析
    flume+hadoop
    Flume+kafka+storm+hdfs
    IOS中坐标转换
    tabBarItem是模型,只有控件才有textColor属性
  • 原文地址:https://www.cnblogs.com/CaesarLinsa/p/11109525.html
Copyright © 2011-2022 走看看