zoukankan      html  css  js  c++  java
  • Python 读写Excel文件 总结

    Python 读写 Excel文件 总结

    最近接连帮同学处理Excel表格,他们的出发点就是,数据项太多导致手动处理工作量太大了,寻求能不能用软件自动化处理的办法。其实利用Python编写十行左右代码就能解决相应的重复简单的工作,由于我总是记不清相关库,在这里详细总结各种库和函数接口以方便自己查阅和帮助大家高效完成工作。

    Excel是什么

    我们常用的Excel是由微软开发的电子表格办公软件,其所创建的文件显示为一系列行与列组成的网格。

    Excel文件的后缀名通常有以下几种形式:

    1. xlsx Excel2007 - 目前最新版默认的文件格式,不能有宏
    2. xls Excel97 - 2003版的文件格式,可以有宏
    3. csv 以逗号分隔的文本文件(Comma-Separated Values)

    在Excel中还能以纯文本形式(使用Tab分隔)或PDF格式保存,这种存储格式会导致表格数据失去通用性,在此不作说明。

    xlrd模块读Excel

    xlrd是一个读取Excel文件的Python模块(A Python module for extracting data from MS Excel (TM) spreadsheet files.)

    首先要掌握的是open_workbook方法,查看源码可见其参数非常复杂,通常只需要传入文件名参数即可,返回一个Book对象。

    filename = 'myfile.xls'
    
    readxls = xlrd.open_workbook(filename)
    

    Excel打开后可能会有多个电子表(sheet),成员方法sheets返回打开的book内全部电子表组成的列表。

    获取第一个电子表

    sheet1 = readxls.sheets()[0]
    
    # sheet_by_index 按下标返回电子表
    # sheet1 = readxls.sheet_by_index(0)
    
    # sheet_by_name 按表名返回电子表
    # sheet1 = readxls.sheet_by_name('Sheet1')
    

    对电子表遍历

    # 获取电子表行数
    nrows = sheet1.nrows
    ncols = sheet1.ncols
    
    # 按行遍历
    for i in range(nrows):
    	# rowList为字符串组成的列表
    ​	rowList = sheet1.row_values(i)
    
    # 按列遍历
    for i in range(ncols):
    	colList = sheet1.col_values(i)
    

    xlwt模块写Excel

    一般处理Excel表格需要对Excel内的数据进行修改整理,前面的wlrd模块只完成的读的操作,若要实现对数据项的修改,这里采取引入xlwt模块,新建Excel完成写入的操作。

    # 创建一个Workbook对象,用于保存工作表
    workbook = xlwt.Workbook()
    
    # 添加电子表
    sheet1 = workbook.add_sheet('Sheet1')
    
    # 以二维表格形式存入数据
    # 乘法口诀表
    rows = 9
    cols = 9
    for i in range(rows):
    	for j in range(cols):
    		if i<=j:
    			sheet1.write(j, i, '%d x %d = %d'%(i+1, j+1, (i+1)*(j+1)))
    
    # 保存工作表
    workbook.save('out.xls')
    

    运行结果

    保存Excel结果

    csv模块读写csv文件

    对于特殊的csv文件格式,直接引入Python自带的csv模块处理会更方便。

    读文件

    import csv
    
    with open(filename) as f:
    	data = csv.reader(f)
    	# 按行读取文件
    	for row in data:
    		pass
    

    写文件

    首先创建一个writer对象

    csv_writer = csv.writer(filename)
    

    写文件实例

    import csv
    
    headers = ['id','name','age']
    rows = [
            [1, 'zong', 23],
            [2, 'xxx', 22],
            [3, 'izcat', -1],
            [4, 'helloworld', 0]]
    
    with open('out.csv','w', newline='') as f:
    	# 创建一个writer对象
        csv_writer = csv.writer(f)
    
        # writerow写入一行
        csv_writer.writerow(headers)
        # writerows写入多行
        csv_writer.writerows(rows)
    
    

    保存的文件以文本形式打开时,显示内容为逗号分隔的纯文本字符;用Excel软件打开则显示为正常的电子表格。

    pandas库读Excel

    对于需要做数值处理,特别是有关矩阵、向量等数值计算,不妨使用pandas库来读入Excel中的数据。

    示例

    import pandas as pd
    
    filename = "data.xls"
    
    # header=0 第一行为列名
    # header=None 第一行没有列名,为数据
    data = pd.read_excel(filename, header=None)
    
    # 二维表格的列数和行数
    m, n = data.shape
    
    # 数据归一化处理
    data  =  (data-data.min()) / (data.max()-data.min())
    
    # 转化为矩阵 方便以矩阵形式的数值计算
    data = data.as_matrix(columns=None)
    
    

    (待完善)

  • 相关阅读:
    Delphi TcxComboBox控件说明
    Delphi ComboBox的属性和事件、及几个鼠标事件的触发
    Delphi XE5的新功能“ TListView内置搜索过滤”
    可能是全网最全的解决摄像头无法创建视频捕捉过滤器问题?
    Delphi – TDataSet确定它是否在插入/编辑状态时被修改
    Delphi 获取DataSet传入参数后的SQL命令
    TClientDataSet[7]: 辨析 Field、FieldDef、Fields、FieldDefs、FieldList、FieldDefList
    枚举HasFlag函数实现的内部逻辑是什么
    在DBGrid中用代码实现按回车键跳到下一格的方法
    eclipse下没有Dynamic Web Project的处理方法
  • 原文地址:https://www.cnblogs.com/izcat/p/12324023.html
Copyright © 2011-2022 走看看