使用Python处理excel表格(openpyxl)及表格中的中文处理
2015-11-20 16:08
731 查看
现在有个小任务,需要处理excel中的数据。其实就是简单的筛选,excel玩的不熟练,而且需要处理的表有70多个,于是想着写个脚本处理一下吧。
python中的openpyxl包可以轻松实现读写excel文件,下面简单介绍一下过程。
openpyxl官网:https://openpyxl.readthedocs.org/en/latest/
安装命令:
or
即可。
获取每个sheet的名称
获得第一个sheet
获取一个单元格的数据
一次获取多个单元格的数据
or
再增加一个sheet写内容
可以写一个函数专门处理转码,需要时调用
当原始的excel文件是gbk编码时,就需要tag=0的方式去处理,
因为读入后是gbk的编码,需要先encode为gbk再decode为unicode,再encode为utf8,就可以显示了。
python中的openpyxl包可以轻松实现读写excel文件,下面简单介绍一下过程。
1.安装openpyxl
通过pip或者easy_install均可安装openpyxl。openpyxl官网:https://openpyxl.readthedocs.org/en/latest/
安装命令:
pip install openpyxl
or
easy_install openpyxl
即可。
2.使用openpyxl读xlsx
加载workbook,注意,openpyxl只支持xlsx格式,老版的xls格式需要其他方法去加载。wb = load_workbook(filename = r'tj.xlsx')
获取每个sheet的名称
sheetnames = wb.get_sheet_names()
获得第一个sheet
ws = wb.get_sheet_by_name(sheetnames[0])
获取一个单元格的数据
c = ws['A4']or
c = ws.cell('A4')or
d = ws.cell(row = 4, column = 2)
一次获取多个单元格的数据
cell_range = ws['A1':'C2']or
tuple(ws.iter_rows('A1:C2'))or
for row in ws.iter_rows('A1:C2'): for cell in row: <span style="white-space:pre"> </span>print cell
or
data_dic = [] for rx in range(0,ws.get_highest_row()): temp_list = [] money = ws.cell(row = rx,column = 1).value kind = ws.cell(row = rx,column = 2).value temp_list = [money , kind] #print temp_list data_dic.append(temp_list) for l in data_dic: print l[0],l[1]
3.写入xlsx
比如数据存在上边定义的data_dic中out_filename = r'result.xlsx' outwb = Workbook() ew = ExcelWriter(workbook = outwb) ws = outwb.worksheets[0] ws.title = "res" i=1 for data_l in data_dic: for x in range(0,len(data_l)): #col = get_column_letter(x) ws.cell(column = x+1 , row = i , value = "%s" % data_l[x]) i+=1 ew.save(filename = out_filename)
再增加一个sheet写内容
ws2 = outwb.create_sheet(title = 's2') for data_l in data_dic: for x in range(0,len(data_l)): ws2.cell(column = x+1 , row = i , value = "%s" % data_l[x]) i+=1 ew.save(filename = out_filename)
4.中文编码问题
表格中的值,openpyxl会自动转换为不同的类型,有些表格中会有中文出现,就需要进行相应的转码。可以写一个函数专门处理转码,需要时调用
def gbk2utf(in_data , tag): if 1 == tag: return in_data.encode('gbk').decode('gbk') elif 0 == tag: return in_data.encode('gbk').decode('gbk').encode('utf8')
当原始的excel文件是gbk编码时,就需要tag=0的方式去处理,
因为读入后是gbk的编码,需要先encode为gbk再decode为unicode,再encode为utf8,就可以显示了。
相关文章推荐
- 关于在windows平台下使用ipython运行pyspark的问题
- Python中sorted()方法的用法
- Python编程中使用Pillow来处理图像的基础教程
- [python]print简单用法和读取用户输入
- python 读写JSON数据
- 在Mac OS系统上安装Python的Pillow库的教程
- 详解Python编程中time模块的使用
- Python多进程编程
- Windows上配置Emacs来开发Python及用Python扩展Emacs
- 将Emacs打造成强大的Python代码编辑工具
- 【python游戏编程之旅】第三篇---pygame事件与设备轮询
- Python 实现单向链表
- Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
- selenium webdriver python 元素操作
- selenium webdriver python 元素定位
- Python中的GIL、多进程和多线程
- 如何用python语句获得Python的安装目录
- 【python】关于python 安装包时报错问题
- python3中替换python2中cmp函数的新函数分析(lt、le、eq、ne、ge、gt)
- selenium webdriver python 等待