平时使用excel较多,但是编程使用json格式较多,每次转换都很麻烦。所以写了一个小脚本。实现的思路很简单,利用xlrd操作excel,把表头作为字典的字段,逐行读取记录,其中数字python默认是float类型,此处写死强行换成str类型。最后利用Python的json包dumps一下,不过要注意ensure_ascii=False
,不然会输出'/u989'
之类的编码,indent = 2
是为了输出的美观。
# -*- coding: utf-8 -*-
# 这段代码主要的功能是把excel表格转换成utf-8格式的json文件
import os
import sys
import codecs
import xlrd
import xdrlib
import json
reload(sys)
sys.setdefaultencoding( "utf-8" )
def open_ecxcel(file):
try:
data = xlrd.open_workbook(file)
return data
except Exception , e:
print str(e)
#根据名称获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的所以 ,by_name:Sheet1名称
def excel_table_byname(file,colnameindex=0,by_name=u'Sheet1'):
data = open_ecxcel(file)
table = data.sheet_by_name(by_name)
nrows = table.nrows
colnames = table.row_values(colnameindex)
records = []
for rownum in range(1,nrows):
row = table.row_values(rownum)
if row:
record = {}
for i in range(len(colnames)):
#excel 默认float ,强制类型转换
if type(row[i]) == float:
row[i] = int(row[i])
row[i] = str(row[i])
record[colnames[i]] = row[i]
records.append(record)
return records
#open_ecxcel('wzsj.xlsx')
recodes = excel_table_byname('wzsj.xlsx')
encodedjson = json.dumps(recodes,ensure_ascii=False,indent=2)
#encodedjson = json.dumps(recodes)
print encodedjson
output = open('data11.json', 'w+')
output.write(encodedjson)
其中关于读取excel数据还可以利用表格的索引值,代码如下
#根据索引获取Excel表格中的数据 参数:file:Excel文件路径 colnameindex:表头列名所在行的所以 ,by_index:表的索引
def excel_table_byindex(file,colnameindex=0,by_index=0):
data = open_ecxcel(file)
table = data.sheets()[by_index]
nrows = table.nrows #行数
ncols = table.ncols #列数
colnames = table.row_values(colnameindex) #某一行数据
records = []
for rownum in range(1,nrows):
row = table.row_values(rownum)
if row:
record = {}
for i in range(len(colnames)):
record[colnames[i]] = row[i]
records.append(record)
return records