python读取excel(读写处理xls或xlsx)

本文详细介绍了如何使用Python和扩展模块pyexcel-xlsx读取excel配置,包括等级-经验表等实例,提供了从读取到写入excel的完整流程。

前言

在很多应用场景中,程序都需要读取excel的配置。

比如,在游戏中,数值策划用excel 建好了数值表,我们要导入到游戏中。比如最简单的,等级-经验表。

注: 本文更新于2021.4.12, 基于python3,  以及扩展模块:pyexcel-xlsx

 

安装:

pip install pyexcel-xlsx

 

读Excel表,xlsx格式:

数据示例:

python 代码示例:

import json
from pyexcel_xlsx import get_data

data = get_data("d:/lv.xlsx")
print(type(data))     # 可以看到, 类型为collections.OrderedDict
print(json.dumps(data))

看一下输出, 是可以读出来的:

<class 'collections.OrderedDict'>
{"Sheet1": [["\u7b49\u7ea7", "\u5347\u7ea7\u9700\u8981\u7ecf\u9a8c"], [1, 40], [2, 90], [3, 140], [4, 210], [5, 280], [6, 360], [7, 450], [8, 540], [9, 650], [10, 760]], "Sheet2": [], "Sheet3": []}
 

 

--------- 以下是旧的, python2版本的文章 ---------

概述

这里我使用了 pyexcel-xls 这个东西。我个人觉得这个东西导出的数据结构,结构可读性很强,数据结构如下:

整个excel文件,转化为一个字典结构:每个key就是一个子表(Sheet)

每个子表(Sheet),转化为一个二维数组:分别为行和列。

注意,本文对应的版本更新为 pyexcel-xls 0.2.3。

 

安装

pypi 的地址:

https://pypi.python.org/pypi/pyexcel-xls/ 

 

■ 方法一:

可以直接用pip安装

pip install pyexcel-xls

 

 

■ 方法二:

下载安装包手动安装。

先安装两个依赖包

xlrd pyexcel-io

然后再安装 pyexcel-xls

 

使用

一、读excel数据 (xls, xlsx)

 

1,先建立一个目标excel表,这里为了做演示,简单建立一个 read_test.xlsx 文件:

里面的数据(3行,4列):

 

2,写Python 脚本,读这个文件:

 

#! /usr/bin/env python
#coding=utf-8

# pyexcel_xls 以 OrderedDict 结构处理数据
from collections import OrderedDict

from pyexcel_xls import get_data
from pyexcel_xls import save_data


def read_xls_file():
    xls_data = get_data(r"D:\read_test.xlsx")
    print "Get data type:", type(xls_data)
    for sheet_n in xls_data.keys():
        print sheet_n, ":", xls_data[sheet_n]


if __name__ == '__main__':
    read_xls_file()

 

 

 

 

 

看一下输出的打印信息:

 

 

可以看到:

整个excel文件,转化为一个OrderedDict (有序字典)结构:每个key就是一个子表(Sheet)。

每个子表(Sheet),转化为一个列表结构:很像二维数组,第一层列表为行(Row),行的下标为列(Column),对应的值为单元格的值。编码为 unicode

简单,易用,读出数据后,非常适合做二次处理!

■ 注意,excel文件名(就是那个xls或者xlsx文件),尽量不要用中文,如果您要使用中文,请转化为unicode编码,如:

xls_data = get_data(unicode(r"D:\试试.xlsx", "utf-8"))

 

 

 

二、写excel数据 (xls)

根据上文,写也比较简单,不做过多解释。

#! /usr/bin/env python
#coding=utf-8

# pyexcel_xls 以 OrderedDict 结构处理数据
from collections import OrderedDict

from pyexcel_xls import get_data
from pyexcel_xls import save_data


def read_xls_file():
    xls_data = get_data(unicode(r"D:\试试.xlsx", "utf-8"))
    print "Get data type:", type(xls_data)
    for sheet_n in xls_data.keys():
        print sheet_n, ":", xls_data[sheet_n]
    return xls_data


# 写Excel数据, xls格式
def save_xls_file():
    data = OrderedDict()
    # sheet表的数据
    sheet_1 = []
    row_1_data = [u"ID", u"昵称", u"等级"]   # 每一行的数据
    row_2_data = [4, 5, 6]
    # 逐条添加数据
    sheet_1.append(row_1_data)
    sheet_1.append(row_2_data)
    # 添加sheet表
    data.update({u"这是XX表": sheet_1})

    # 保存成xls文件
    save_data("D:\write_test.xls", data)


if __name__ == '__main__':
    save_xls_file()

 

 

看一下写出的xls文件:

 

 

 

好,数据读写完成!

 

 

Python比较两个Excel文档有多种方法,以下为你介绍不同的实现方式: ### 大概位置比较法 先读入要比较的文件中的表,读的时候,如果没有空行就把它和它前面的加一起,直到有空行。这种比较方式不能得到具体哪一行有差异,只有一个大概的位置,且表格中间空行越少,比较越精确。脚本示例可参考如下(示例代码基于引用[1]思路,但代码未完整给出,仅示意): ```python # 此代码为示意,需根据实际情况完善 # 读取文件逻辑 # 合并无空行数据逻辑 ``` ### 交叉排列对比法 将表格A数据和表格B数据交叉排列,奇数位为表格A的数据,偶数位为表格B数据,每两行为同一公司主体,进行上下数据对比。上一行数据没有的下一行补充,上下两行都有数据就进行对比,相同的不做处理,不同的标注颜色,并把表格B的数据放到大括号中拼接到表格A数据之后,最后删除偶数行的所有数据。此方法可实现表格的合并及数据处理,完成数据对比、数据补充、数据交叉验证 [^2]。 ### 逐单元格对比法 可以逐行逐列对比两个Excel表格中单元格的数据,示例代码如下: ```python import openpyxl def getCellOfValue(sheet, rowNo, colsNo): return sheet.cell(row=rowNo, column=colsNo).value origin_wb = openpyxl.load_workbook('origin.xlsx') origin_sheet = origin_wb.active compare_wb = openpyxl.load_workbook('compare.xlsx') compare_sheet = compare_wb.active max_row = max(origin_sheet.max_row, compare_sheet.max_row) max_col = max(origin_sheet.max_column, compare_sheet.max_column) for row_no in range(1, max_row + 1): for num in range(1, max_col + 1): origin_value = getCellOfValue(origin_sheet, row_no, num) compare_value = getCellOfValue(compare_sheet, row_no, num) if origin_value != compare_value: print("第%s行%s列单元格的数据比对结果不一致,源文件中单元格的值是:%s" % (row_no, num, origin_value)) ``` 此代码参考了引用[3]中的输出格式,通过`openpyxl`库读取Excel文件,逐单元格对比两个文件的数据,并输出不一致的单元格信息。 ### 使用Pandas库对比 Pandas是一个强大的分析结构化数据的工具集,提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。示例代码如下: ```python import pandas as pd file1 = pd.read_excel('test1.xlsx') file2 = pd.read_excel('test2.xlsx') # 比较两个DataFrame comparison = file1 == file2 # 找出不同的位置 diff_locations = comparison[comparison == False].stack().index.tolist() for loc in diff_locations: row, col = loc print(f"第{row}行{col}列数据不同,文件1的值为:{file1.loc[row, col]},文件2的值为:{file2.loc[row, col]}") ``` 通过`pandas`库读取Excel文件为`DataFrame`对象,然后直接比较两个`DataFrame`,找出不同的位置并输出差异信息。
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值