最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

通过python,将excel中的数据写入二维列表

来源:博客园

需求:读取Excel表中数据,每行数据放在一个列表中,再把所有列表都存入到一个列表中,形成二维列表。

实现方法:导入可在Python处理Excel表格数据的模块。

excel表:


(资料图片)

方法一:xlwings

了解到xlwings很强大,但是折戟沉沙(本地环境问题)。

1. 写一个测试demo如下:

import xlwings as xw# 打开excel,参数visible表示处理过程是否可视,add_book表示是否打开新的Excel程序with xw.App(visible=True, add_book=False) as app:    # 创建一个工作薄    book = app.books.add()    # 工作薄中创建一个sheet表    sht = book.sheets.add()    # 向表格的A1单元格写入“Hello Python”    sht.range("A1").value = "Hello Python"    # 保存    book.save("./test.xlsx")

2. 代码执行结果:

"D:\Program Files\python3\python.exe" "D:\Program Files\python3\Zyl\demo71.py" Traceback (most recent call last):  File "D:\Program Files\python3\Zyl\demo71.py", line 4, in     with xw.App(visible=True, add_book=False) as app:  File "D:\Program Files\python3\lib\site-packages\xlwings\main.py", line 294, in __init__    self.impl = engines.active.apps.add(  File "D:\Program Files\python3\lib\site-packages\xlwings\main.py", line 203, in add    return App(impl=self.impl.add(**kwargs))  File "D:\Program Files\python3\lib\site-packages\xlwings\_xlwindows.py", line 497, in add    return App(spec=spec, add_book=add_book, xl=xl, visible=visible)  File "D:\Program Files\python3\lib\site-packages\xlwings\_xlwindows.py", line 521, in __init__    self._xl = COMRetryObjectWrapper(DispatchEx("Excel.Application"))  File "D:\Program Files\python3\lib\site-packages\win32com\client\__init__.py", line 145, in DispatchEx    dispatch = pythoncom.CoCreateInstanceEx(pywintypes.com_error: (-2147024894, "系统找不到指定的文件。", None, None)Process finished with exit code 1

百度搜索该问题,很多回答都是说安装了WPS导致的该问题,我的电脑并未安装WPS,无法用网上搜索到的解决方案解决。还有的说要根据报错修改源码,比较麻烦,放弃。

方法二:xlrd

该方法可将excel数据转化为二维列表,但是列表的中的数据格式发生变异。

1. 代码实现如下:

import xlrd# coding=utf-8#读取文件def read_excel(files, sheet, row):    try:        workbook = xlrd.open_workbook(files)        table = workbook.sheet_by_name(sheet)        nrows = table.nrows  # 表的行数        value_list = []        for i in range(row, nrows):            rowvalue = table.row_values(i)[0:5]            value_list.append(rowvalue)        print(value_list)        return value_list    except:        print("文件读取失败!")# 调用函数read_excel(r"D:\Program Files\python3\Zyl\sgs2.xls","压测结果",2)

2. 代码执行结果:

时间、数字的格式不对,再转化比较麻烦,该方法舍弃。

方法三:openpyxl

这也是一款强大的工具,满足当前需求,采用。

1. 代码实现如下:

import openpyxl#读取文件def read_excel(files, sheet):    try:        my_list = []  # 按行存放Excel表中数据        wb = openpyxl.load_workbook(files)        ws = wb[sheet]        maxrows = ws.max_row  # 获取最大行        for i in range(maxrows-2):            temp_list = []            for each in ws.iter_cols( max_col=5,min_row=3):                temp_list.append(each[i].value)            my_list.append(temp_list)        print(my_list)        print(ws)        return my_list    except:        print("文件读取失败!")# 调用函数read_excel(r"result.xlsx","压测结果")

2. 代码执行结果:

excel表中的数据写入到列表中后,格式没有发生变化。 nice!!!

关键词: 调用函数 发生变化 折戟沉沙