登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
本帖最后由 weinihou 于 2019-8-9 22:30 编辑
2017-05-19 补充
那个,下面之所以用到 xlrd ,完全是因为我对 pandas (Python Data Analysis Library)不熟
大家完全可以直接用pandas里面的函数来处理Excel数据,比 python-excel 强大……太多……
比如大家可以直接搜索 pandas Excel 或者其他类似内容,可能用到 pandas.read_excel() pd.ExcelFile() 等等函数
可能有闲了新开一贴介绍,或者大家谁有兴趣分享分享吧,暂时不会整理相关内容(其实直接网上能找到的资料就一大堆了,似乎没有什么整理的必要性)
至于下面的内容……对于急着用的还是有一定参考价值的,吧?
这里仅仅介绍下“怎么读取Excel”,怎么写入可以自行搜索 xlwt 的相关内容(虽然我觉着大家一般不会碰到)
然后更多关于Python处理Excel的内容也可以自行参考相关材料,比如 http://www.python-excel.org
xlrd
http://xlrd.readthedocs.io/en/latest/index.html
GitHub上也给了官方的些示例,
https://github.com/python-excel/tutorial/tree/master/students/xlrd
xlrd可以读取Excel里的数据,无论 .xls .xlsx
# 先载入模块
import xlrd
# 文件名及其路径
filename = 'XX/XX.xls'
# 打开文件,获取文件对象(book)
bk = xlrd.open_workbook(filename, )
# 有其他的打开方式,比如配合mmap等,个人感觉直接这样是比较简单的
# 现在我们已经得到文件对象了,可以看一些文件的属性,比如我觉着可能比较常用的几个:
bk.dump() # 文件的各种属性简述
bk.nsheets # 工作簿的个数(sheet)
bk.sheet_names() # 工作簿的名字
# 接下来该打开工作簿了,通过上面获得的 个数 或者 名字 可以用两种方式
# 1)通过工作簿列表数来,配合bk.nsheets
sh = bk.sheet_by_index(0)
# 2)通过名字来,配合bk.sheet_names()
sh = bk.sheet_by_name('Sheet1') # 此处注意 大小写、中文等非标准字符解码的处理
# 顺手看下工作簿的属性吧,比如:
sh.dump() # 和上面相似,看各种属性梗概
sh.name # 就是名字诶,如果是靠参数打开的,可以输出确认下
sh.ncols # 列数
sh.nrows # 行数
# 上面俩是说数据的,我们假设数据是紧凑的,没有说神经的在隔了老远的地方突然蹦出来一个,那这俩参数可以用来估计下数据量,可以输出来确认下
# 重点来了,打开这些文件还不是为了读取数据啊~
# 1)通过单元格来读
sh.cell_value(rowx = 1,colx = 2) # 读取第2行、第3列,即Excel里C2单元格的内容,如果自己能搞清参数行row和列col的顺序,也可以直接用下面的缩写形式
sh.cell_value(1,2) # 等效于前面那个
# 注意这里读出来中文字符可能额外需要配置字符解码,utf-8什么的;另外单元格参数 rowx 和 colx 一定要在 sh.nrows sh.ncols 范围内(具体可能有每一行不一样的情况,但似乎大家不大可能遇到,通常Excel会设置成统一的,空单元格的值为空字符'')
# 2)通过行来读(读成list)
sh.row_values(0) # 读取第1行,完整形式:
sh.row_values(2, start_colx=4, end_colx=8) # 读取3行,从第5列开始,一直读到第8列,即 cell_value(2,4)到cell_value(2,7),注意这里不包含cell_value(2,8);可以设置end_colx=None 读到行末(由sh.ncols定义)
sh.row_slice(2,4,8) # 和上面那个在取值上没啥区别,但会加上数据属性,比如‘text:’等等 ,除特殊需要,建议不要使用(那你为啥还要写!!!我不会告你是不想自己白试 (;¬_¬) )
# 3)通过列来读(也是读成list)
sh.col_values(0)
sh.col_values(2, start_colx=4, end_colx=8)
sh.col_slice(2,4,8)
# 鉴于和上面一毛一样,就不再细说解释了
# End
差不多就是这样了,剩下的自己组合组合吧,尤其是这里默认都是直接读取为Python的list,如果需要数值计算,可能需要转 numpy.array 或者其他你需要的东西
如果只是list就满足了,可以考虑写个循环把工作簿中所有数据都先搞出来,比如:
- data_list = []
- for i in range(1,sh.nrows):
- row_data = sh.row_values(i)
- data_list.append(row_data)
复制代码
其他的很多可以参考上面链接给的资料、示例,比如文件比较大,可以考虑 bk.unload_sheet(name)
然后现在的文件打开方式其实不够好,因为你可以看到,获取完对象之后连个关闭文件的close操作都没有,能不能打开成功也全在交互方式试了,如果要搞批量,还得准备些其他东西,比如官方示例里这种:
https://github.com/python-excel/tutorial/blob/master/students/xlrd/open.py
希望对大家有帮助
|