python导入xlsx不包括第一列

Python017

python导入xlsx不包括第一列,第1张

python 第一列 读取xlsx_Python新手上车25:Python操作读取Excel1 原创

2021-01-09 16:00:30

weixin_39890543

码龄5年

关注

ab7f79acbc82f90e2db6ee5721f42ab7.png

我们经常谈到Python 在办公自动化方面的能力,用python来处理Excel表格更是其中典型的代表,这个阶段我们会提到xlrd 、xlwt 、openpyxl等处理Excel的利器。最后我们还会提到pandas ,使用padas 你会发现处理数据如此简单高效!

eb518697b01f6d5830ca52f0f499813a.png

xlrd安装

开始菜单-->输入CMD -->pip install xlrd=1.2.0

操作视频如下所示:

这里说明一下为什么要使用xlrd 1.2.0版本, 之前也遇到了这个坑,当你不指定版本时,默认给你安装最新版本xlrd2.0.1 ,但是使用后者读取.xlsx格式的文件时会出现以下报警:

xlrd.biffh.XLRDError: Excel xlsx file;not supported

2.0.1不支持xlsx格式文件,而目前我们使用的Excel2007以上版本生成的文件均是xlsx格式的,所以我们还是使用xlrd 1.2.0 来读取Excel. 当然未来我们还会讲到openpyxl,它不存在版本问题。

检查xlrd是否安装成功:

13c7fbca5f7498dbfb612f9f893fc10d.png

开始菜单-->输入CMD -->输入python-->输入 import xlrd

如果没有报警,那么说明xlrd安装成功

69137235f18f40213e28372e862d3b6a.png

使用xlrd打开Excel

在程序的同级目录下有一个person_data 的Excel,里面有如下数据:

person_data.xlsx:

57313628be8049b09be1c7c9f56b0a4b.png

import xlrdworkbook=xlrd.open_workbook("person_data.xlsx")sheet1=workbook.sheet_by_name("Sheet1")print(sheet1.cell(1,0).value)

第一行:我们导入xlrd库

第二行:我们使用xlrd.open_workbook(path),括号以内是路径名称

第三行:我们使用workbook的sheet_by_name方法并传入“Sheet1”,代表我们按照表格名进行索引,找到“Sheet1”这个表,并将其赋值给sheet1

第四行:我们打印sheet1中的cell(1,0)的值,python是按0开始索引的,所以结合之前的VBA知识,cell(1,0)是哪个单元格呢?

来看看执行结果:

ac6c64308dcb2c9e6b51e0634e9a4733.png

没错,cell(1,0)代表的就是第二行的第一列单元格,即“张一“ 这个名字。

e3e169b089abcc08056be022f89cabf0.png

遍历表格的列或行

事实上只取某个数值并不是我们想要的,有时候我们希望结合循环的方法,将一列或一行的数值取出,这样更有意义:

import xlrdworkbook=xlrd.open_workbook("person_data.xlsx")sheet1=workbook.sheet_by_name("Sheet1")for i in range(1,8):print(sheet1.cell(i,0).value)

第一行:我们导入xlrd库

第二行:我们使用xlrd.open_workbook(path),括号以内是路径名称

第三行:我们使用workbook的sheet_by_name方法并传入“Sheet1”,代表我们按照表格名进行索引,找到“Sheet1”这个表,并将其赋值给sheet1

第四行:我们遍历1-8范围,并把数值赋给i

第五行:我们打印第一列,第2至8行的数据,即姓名值

看看执行结果:

6529ae7788ad62a5dae46fd6d2f40384.png

这样我们就将表格中的数据获取出来了

dab01852cbcb5352cbf4d158dd216952.png

行数和总列数

很多时候,我们希望表格中的行数是可变的,因为这样可以是记录变得可持续,但是带来的问题是,我们遍历的范围就需要是可变的,如何寻找这个可变的行数变量呢,我们可以使用总行数nrows 和总列数ncols 来计算目前的总列数和总行数:

以上excel为例,我们添加两行数据(红色字体部分):

person_data.xlsx:

82300f6f643082b27f8ddc1178ddbf15.png

现在我们来读取职位为工程师的人员的姓名:

import xlrdworkbook=xlrd.open_workbook("person_data.xlsx")sheet1=workbook.sheet_by_name("Sheet1")max_rows=sheet1.nrowsprint(sheet1.ncols)for i in range(1,max_rows):if sheet1.cell(i,2).value == "工程师":print("姓名:"+sheet1.cell(i,0).value +" 职位:"+sheet1.cell(i,2).value)

第一行:我们导入xlrd库

第二行:我们使用xlrd.open_workbook(path),括号以内是路径名称

第三行:我们使用workbook的sheet_by_name方法并传入“Sheet1”,代表我们按照表格名进行索引,找到“Sheet1”这个表,并将其赋值给sheet1

第四行:sheet1.nrows 代表sheet1的总行数,我们将总行数赋值给max_rows变量

第五行:打印sheet1的最大使用列数 ,即sheet1.ncols

第六行:遍历第2行至max_rows行

第七行:判断第i行第3列的值是否等于“”工程师“ ,如果是,则执行下面代码

第八行:打印姓名以及职位信息

看看执行结果:

a4af0341c5ac005bdf947761ba277786.png

现在即使我们再在person_data.xlsx里面增加数据(如下所示),也无需修改代码了:

0f6ed1fd8955b903f1813ea6bf28ff50.png

使用同样代码执行:

fbefb945b686615c64c5a54162060b6a.png

这样我们就可以让输入者动态输入,而我们的程序仍然可以正常运行。

9da1a8e34a48225da12483e3160fafdf.png

上期答案与本期习题

上期答案:

1.使用python创建一个write_test.txt ,并在里面写入一句话:life is short,I use python

with open('write_test.txt','w') as file_object:file_object.write('Life is short , I use python')

59248d239d2d52331b726b30b6d52559.png

本期习题:

1.创建一个test.xlsx的Excel ,在Excel内填写一行信息,使用python读取这一行信息,并将它打印出来。

代码如下:import redisclass Database: def __init__(self): self.host = 'localhost' self.port = 6379 def write(self,website,city,year,month,day,deal_number): try: key = '_'.join([website,city,str(year),str(month),str(day)]) val = deal_number r = redis.StrictRedis(host=self.host,port=self.port) r.set(key,val) except Exception, exception: print exception def read(self,website,city,year,month,day): try: key = '_'.join([website,city,str(year),str(month),str(day)]) r = redis.StrictRedis(host=self.host,port=self.port) value = r.get(key) print value return value except Exception, exception: print exception if __name__ == '__main__': db = Database() db.write('meituan','beijing',2013,9,1,8000) db.read('meituan','beijing',2013,9,1)

简单的介绍一下这两个库,先说xlrd,这个库读Excel比较方便,各种方法使用起来也挺方便:

bk = xlrd.open_workbook('your.xls')

sh = bk.sheets()[-1]

上面两句就可以打开Excel表格中的一个sheet,sheets得到的是一个list,存放所有的sheet。

sh.nrows是该sheet中的行数,知道这个后就可以使用for循环来读所有的单元格了:

sh.row(i)[3]这个就代表第i行的第4列。

再看看pyExcelerator,这个用起来有点别扭:

sheets = parse_xls('result.xls')

先打开一个表格,sheets是一个list,包含了所有表格的内容,每一项就是一个sheet,而每个sheet是二元tuple,第一个是该sheet的名字,第二个是一个dict,dict的key是一个二元组,表示单元格的坐标,如(0,0),第一行第一列。

从上面的分析中可以得出要访问Excel中第一个sheet的第一行第一列元素需要:

sheets[0][1][(0,0)]

pyExcelerator也不能得到行列数。

写文件也比较简单:

wb = Workbook()

ws = wb.add_sheet('result')

ws.write(0,0,“hello”)

wb.save('result.xls')

就不解释了:-)

写文件时需要注意直接写Unicode内容进去,而不要写编码过的内容。

本文来源于可可熊的窝 http://cocobear.info/blog , 原文地址: