python 读取excel 并存入二维列表

昨天在处理python读取excel的时候遇到了点小问题。分享一下~

起初想法是把excel里面的数据读取并存在二维数组返回,供后面处理使用

def readexcel(exceldir):
    os.chdir(exceldir)
    try:
        f1 = xlrd.open_workbook('sggwhu_stationinfo.xlsx')
    except:
        print('There is no excel named sggwhu_stationinfo.xlsx\n Please cheek ! \n')
    sheet = f1.sheet_by_index(0)                 # 读sheet,这里取第一个sheet
    rows  = sheet.nrows                          # 获得行数
    infor = [[] for i in range(rows)]            # 定义了一个二维列表,行数等于sheet的行数。
    for i in range(1, rows):                     # 去掉表头,从第二行开始读
        for j in range(1, 5):                    # 因为第一列是序号,数据从第二列开始读
            infor[i-1][j-1]=sheet.cell(i,j).value# 给二维列表赋值
    print(infor)
    return infor

但是有报错:

python 读取excel 并存入二维列表_第1张图片

开始以为是超界了反复试都没用,后来把infor输出来才意识到cell返回的是一个数组,而每次赋值给一个数组当然会超界

每次返回元素才行,但没找到相关的excel函数,于是将代码修改了一下,每次就接收数组。

sheet.cell(i, j) 是读取 i 行 j 列的表格元素,为了得到一行的值,改用sheet.row_values(i) 得到 i 行的元素。

注意返回的也是数组形式,因此循环读取一定要定义二维列表。

def readexcel(exceldir):
    os.chdir(exceldir)
    try:
        f1 = xlrd.open_workbook('sggwhu_stationinfo.xlsx')
    except:
        print('There is no excel name sggwhu_stationinfo.xlsx\n Please cheek ! \n')
    sheet = f1.sheet_by_index(0)             # 读sheet,这里取第一个
    rows  = sheet.nrows                      # 获得行数
    data  = [[] for i in range(rows)]        # 去掉表头,从第二行读数据
    for i in range(1, rows): 
        data[i-1] = sheet.row_values(i)[1:5] # 去掉序号,取四个数据
    #for var in data:
        #print(var)
    return data

记得要import xlrd

 

这样的话就OK了

你可能感兴趣的:(python)