前言

excel表格中的数据,转化为json格式,再用程序去处理json数据,是常见的数据处理方式。这样可以实现按照需求去做数据处理。

需要用到的软件

除了python环境外,主要用到读取excel文件的库,以及json数据格式处理库。
常用的excel库:

openpyxl: 可以用来读写Excel文件的库。可以处理.xlsx文件,支持读取和写入单元格、行、列等操作。
xlrd:可以用来读取Excel文件的库。可以处理.xls文件,包括读取单元格、行、列等操作。

json库:

json:Python自带的JSON解析库,支持将JSON字符串解析成Python对象,也支持将Python对象转换为JSON字符串。
requests:第三方库requests可以快速发送HTTP请求,并自动解析JSON数据。

软件的安装:
例如,openpyxl的安装方式如下:

pip install openpyxl

excel常用组件概念:

workbook对象:对应于一个excel文件
Sheet对象:对应于一个sheet
单元格对象:sheet中的一个单元格
行:sheet中的行
列:sheet中的列

openpyxl和xlrd都支持以上概念,都有对应的获取方法。

实践

例子1: 用openpyxl来进行excel的处理,json库来进行json数据的处理。

# -*- coding: utf-8 -*-import osimport sysimport openpyxlimport jsonimport io# 将json保存为文件def save2json(jd, json_file_name):file = io.open(json_file_name, 'w', encoding='utf-8')# 把对象转化为json对象# indent: 参数根据数据格式缩进显示,读起来更加清晰# ensure_ascii = True:默认输出ASCII码,如果把这个该成False, 就可以输出中文。txt = json.dumps(jd, indent=2, ensure_ascii=False)file.write(txt)file.close()# excel表格转json文件def excel2json(excel_file, json_file_name):# 加载工作薄book = openpyxl.load_workbook(excel_file)# 获取sheet页sheet = book["Sheet1"]# 行数max_row = sheet.max_row# 列数max_column = sheet.max_columnprint("max_row: %d, max_column: %d" % (max_row, max_column))# 结果,数组存储result = []heads = []# 解析表头for column in range(max_column):# 读取的话行列是从(1,1)开始heads.append(sheet.cell(1, column + 1).value)# 遍历每一行for row in range(max_row):if row == 0:continueone_line = {}for column in range(max_column):# 读取第二行开始每一个数据k = heads[column]cell = sheet.cell(row + 1, column + 1)value = cell.valueone_line[k] = valueprint(one_line)result.append(one_line)book.close()# 将json保存为文件save_json_file(result, json_file_name)#mainif '__main__' == __name__: excel2json(u't1.xlsx', 'res.json')

例子2: 用xlrd来读取excel文件:

# -*- coding: utf-8 -*-import osimport sysimport jsonimport ioimport xlrd# 打开Excel文件,返回workbook对象wb = xlrd.open_workbook('a.xls')# 获取Sheet对象sheet = wb.sheet_by_name('Sheet1')# 读取某单元格的数据print(sheet.cell_value(0, 0))# 读取某行数据,返回一个列表row = sheet.row_values(1)print(row)# 读取某列数据,返回一个列表column = sheet.col_values(0)print(column)# 循环读取多行数据for i in range(sheet.nrows):row = sheet.row_values(i)print(row)

例子3: 用requests来处理网络数据:

import requestsurl = 'http://api.mytest.com/v1/user'response = requests.get(url)# 解析JSON数据data = response.json()print(data)# 访问JSON数据的某一项name = data[0]['name']print(name)

以上,就是本篇的内容了。