python 解析excel

本文介绍了一种将CSV文件转换为JSON格式的方法,利用Python进行数据解析和转换,并详细展示了如何构建复杂的JSON结构来适配特定的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先把excel导出csv格式。

解析成json

# -*- coding: utf-8 -*-  
  
import os  
import sys  
import os.path  
import shutil  
import Image  
import json
class getoutofloop(Exception): pass
a ={'小图标':0,'名称':2,'价格':4,'部位':5,'类别':6,'星级':7,'备注':8,'切图编号':9,
'总层数':11,'部件层':12,'是否润色层':13,'色值':14,'黑白':15,'定位':16}

clasifyMap = {
	'a':'QingChun',
	'b':'TianMei',
	'c':'RiChang',
	'd':'DaiMeng',
	'e':'ZiRan',
	'f':'ZhiYe',
	'g':'QingShu',
	'h':'JieRi',
	'i':'GaoGuai',
	'j':'LuoLi',
	'k':'AnHei',
	'l':'SheHua',
	'm':'DiYu',
	'n':'NanZhuang',
	}

attStr = ''

aItems = a.items()
sorted(aItems, lambda x, y: cmp(x[1], y[1]))
for item,value in aItems: 
	# print '%s,=%s' %(item, value)
	attStr+= (item+':'+str(value)+4*' ')
print attStr


FaXingMap ={
	'FaXing':[]
}

FuZhuangMap ={
	'ShangZhuang':[],
	'XiaZhuang':[],
	'TaoZhuang':[],
	'MaoZi':[],
	"YaoShi":[]
}

XieWaMap ={
	'XieZi':[],
	'WaZi':[]
}

PeiShiMap ={
	'ErHuan':[],
	'XiongBu':[],
	'ShouTao':[],
	"ShouWan":[],
	"JiaoWan":[],
	"ZuoShou":[],
	"YouShou":[]
}

MeiRongMap ={
	'YanKuang':[],
	'TongKong':[],
	'MeiMao':[],
	'BiZi':[],
	'ZuiBa':[],
	'PiFu':[],
	'ZhuangShi':[]
}

HuanJingMap ={
	'QianJing':[],
	'BeiBu':[],
	'BeiJing':[],
}

jsonMap = {
				'FaXingMap':
								[
									['头发','FaXing']
								],

				'FuZhuangMap':
								[
									['上装','ShangZhuang'],
									['下装','XiaZhuang'],
									['连身','TaoZhuang'],
									['头饰','MaoZi'],
									['腰饰','YaoShi'],
								],

				'XieWaMap':
								[
									['鞋子','XieZi'],
									['袜子','WaZi'],
								],
				'PeiShiMap':
								[
									['耳环','ErHuan'],
									['胸部','XiongBu'],
									['手套','ShouTao'],
									['手腕',"ShouWan"],
									['脚腕',"JiaoWan"],
									['左手',"ZuoShou"],
									['右手',"YouShou"]
								],

				'MeiRongMap':	
								[		
									['眼眶','YanKuang'],
									['瞳孔','TongKong'],
									['眉毛','MeiMao'],
									['鼻子','BiZi'],
									['嘴巴','ZuiBa'],
									['皮肤','PiFu'],
									['装饰','ZhuangShi'],
								],
				
				'HuanJingMap':	
								[
									['前景','QianJing'],
									['背部','BeiBu'],
									['背景','BeiJing'],
								]

			}					

def getPartMap(partName):
	for key,value in jsonMap.items():
			for tun in value:
				if partName == tun[0]:
					if key == 'FaXingMap':
						return FaXingMap
					if key == 'FuZhuangMap':
						return FuZhuangMap
					if key == 'XieWaMap':
						return XieWaMap
					if key == 'PeiShiMap':
						return PeiShiMap
					if key == 'MeiRongMap':
						return MeiRongMap
					if key == 'HuanJingMap':
						return HuanJingMap
	return {} 

# partMap = getPartMap('皮肤')
# for item,value in partMap.items(): 
# 	print '-------  %s,=%s' %(item, value)
# exit()

fileName = 'data3.csv'
curPath = os.getcwd()# 当前路径  
aim_path = os.path.join(curPath, fileName) 
fileData = file(fileName,'r')
fristAttributeStr = fileData.readline()
lineCount = len(fileData.readlines())
attribute = fristAttributeStr.split(",")
cols = len(attribute)
dataArray = [[0 for col in range(cols)] for row in range(lineCount)]
# print cols
# print dataArray
# for attri in attribute:
# 	print attri
# 	attributeMap[attri] = attri
# for item,value in attributeMap.items(): 
# 	print 'key=%s,value=%s' %(item, value)
# attribute = [[0 for col in range(cols)] for row in range(300)]
# print attribute
fileData = file(fileName,'r')
preLineArray = []


needReadNewLine = True
line = ''
valueArray = []
for i in range(lineCount):
	if needReadNewLine:
		line = fileData.readline()
		line = line[:-1]
		valueArray = line.split(",")
		needReadNewLine = True
	# print '->'+line
	# print valueArray[8]
	if len(valueArray) < 8 : 
		break

	if len(line) < 17:
		continue

	haveSameKey = False;#是否有相同的二级分类
	# print valueArray[8] + "  " + valueArray[7] + "  " + valueArray[9]
	try:
		for key,value in jsonMap.items():
			for tun in value:
				partName = tun[0]
				partKeyName = tun[1]
				if valueArray[8] == partName:
					haveSameKey = True
					newMap = {}
					newMap['rwName'] = valueArray[0]+'.png'
					newMap['buyNeedCoin'] = int(valueArray[4])
					newMap['saleGainCoin'] = int(valueArray[4])
					newMap['classify'] = clasifyMap[valueArray[6]]
					newMap['starLevel'] = int(valueArray[7])
					newMap['value'] = 100
					newMap['num'] = 1
					newMap['isNew'] = False
					newMap['id'] = "1"
					newMap['heartNum'] = 1
					newMap['hexColor3B'] = 'ffffff'

					aimImgArr = []
					newImgArr = []
					newImgArr.append(valueArray[9]+'.png')#图片名字
					newImgArr.append('ffffff' if valueArray[14]=='无' else valueArray[14])#颜色
					blackWhiteAlphaStr = valueArray[15].decode('utf8');
					bwStr = blackWhiteAlphaStr[0:1].encode('utf8')
					# print bwStr + ('Ture' if bwStr == '黑' else 'False')
					bwNum = '0'
					if bwStr == '黑':
						bwNum = blackWhiteAlphaStr[1:]
					elif bwStr == '白':
						bwNum = '-'+blackWhiteAlphaStr[1:]
					# print blackWhiteAlphaStr + '->' + bwNum
					newImgArr.append(bwNum)#黑白alpha
					newImgArr.append(valueArray[11])#global层级
					newImgArr.append(valueArray[12])#part层级
					newImgArr.append('true' if valueArray[13]=='是' else 'false')#是否是润色层
					newImgArr.append(valueArray[16])#定位
					aimImgArr.append(newImgArr)
					while True:
						line = fileData.readline()
						line = line[:-1]
						valueArray = line.split(",")
						if len(line) < 17:
							break
						if  len(valueArray) >7 and len(valueArray[8]) ==0:
							newImgArr = []
							newImgArr.append(valueArray[9]+'.png')#图片名字
							newImgArr.append('ffffff' if valueArray[14]=='无' else valueArray[14])#颜色
							blackWhiteAlphaStr = valueArray[15].decode('utf8');
							bwStr = blackWhiteAlphaStr[0:1].encode('utf8')
							# print bwStr + ('Ture' if bwStr == '黑' else 'False')
							bwNum = '0'
							if bwStr == '黑':
								bwNum = blackWhiteAlphaStr[1:]
							elif bwStr == '白':
								bwNum = '-'+blackWhiteAlphaStr[1:]
							newImgArr.append(bwNum)#黑白alpha
							newImgArr.append(valueArray[11])#global层级
							newImgArr.append(valueArray[12])#part层级
							newImgArr.append('true' if valueArray[13]=='是' else 'false')#是否是润色层
							newImgArr.append(valueArray[16])#定位
							aimImgArr.append(newImgArr)
						else:
							needReadNewLine = False
							haveSameKey = False
							break
					newMap['aimImg'] = aimImgArr
					# FuZhuangMap['ShangZhuang'].append(newMap)
					getPartMap(partName)[partKeyName].append(newMap)
					raise getoutofloop()
	except getoutofloop:
		pass	
	if haveSameKey:
		needReadNewLine = True


# print json.dumps(FaXingMap)
# print json.dumps(FuZhuangMap)
# print json.dumps(XieWaMap)
# print json.dumps(PeiShiMap)
print json.dumps(MeiRongMap)
# print json.dumps(HuanJingMap) 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值