#!/usr/bin/env python
# coding: utf-8
import os.path
import sys
import codecs
import xlrd
import xlwt
from xlwt import Workbook
import shutil
import re
ZONE = "vietnam"
logFile = "createDictionary.txt"
excelDir = ".\策划脚本"
csvDir = ".\工具库文件\\client_csv_config"
#csvDir = "..\csv"
dictDir = ".\dict"+"\\" +ZONE
uiDir = "..\GameEditors\\UIEdit\\res\\ui_edit\\xmds_ui\\"
scenesDir = "..\GameEditors\\GameEditor\\data\\scenes\\"
itemDir = "..\GameEditors\\GameEditor\\data\\items\\"
uiPattern = "([tT]?ext=\".*?\")"
scenesPattern = "(showname=.*?)"
itemsPattern = "(.*?)"
excelDir = unicode(excelDir,'utf8')
csvDir = unicode(csvDir,'utf8')
dictDir = unicode(dictDir,'utf8')
translatedFile = dictDir + '\\translated.xls'
unTranslateFile = dictDir + '\\unTranslated.xls'
g_objName=""
transDict = {}
unTransDict = {}
def isContainChinese(check_str):
for ch in check_str.decode('utf-8'):
if u'\u4e00' <= ch <= u'\u9fff':
return True
return False
def loadTranslatedDict():
data = xlrd.open_workbook(translatedFile)
print "Begin loadTranslatedDict : " + translatedFile
for table in data.sheets():
print " sheet : " + table.name
try:
nrows = table.nrows
ncols = table.ncols
if nrows <= 3:
return
for r in range(nrows):
if ncols<2:
continue
key = str(table.cell_value(r,0)).strip()
val = str(table.cell_value(r,1)).strip()
if len(key)>0 and len(val)>0 :
transDict[key] = val
except Exception,e:
print Exception,":",e
os.system('pause')
print "loadTranslatedDict OK"
return
def NumberToString (aFloat):
strTemp = str(aFloat)
if len(strTemp) == 0:
return '0';
if type(aFloat) != float:
print strTemp + u" - 数字类型格式错误"
os.system("pause")
return ""
strList = strTemp.split(".")
if len(strList) == 1 :
return strTemp
else:
if strList[1] == "0" :
return strList[0]
else:
print g_objName + " : " + strTemp + u" - 类型是否应该改为FLOAT"
os.system("pause")
def FloatToString (aFloat):
strTemp = str(aFloat)
if len(strTemp) == 0:
return '0';
if type(aFloat) != float:
print strTemp + u" - 数字类型格式错误"
os.system("pause")
return ""
strList = strTemp.split(".")
if len(strList) == 1 :
return strTemp
else:
if strList[1] == "0" :
return strList[0]
else:
return strTemp
def StringToString (aStr):
if type(aStr) != float:
return str(aStr)
strTemp = str(aStr)
strList = strTemp.split(".")
if len(strList) == 1 :
return strTemp
else:
if strList[1] == "0" :
return strList[0]
else:
return strTemp
def haveNext(table, col, row, max_cols):
for c in range(col, max_cols):
objType = str(table.cell_value(row, c));
if(objType.find("@") == -1):
return 1
return 0
def table2Dict(table):
type = sys.getfilesystemencoding()
nrows = table.nrows
ncols = table.ncols
if nrows <= 3:
return
for r in range(nrows):
rowName = str(table.cell_value(r,0))
if(rowName.find("@")>=0 ):#略过@打头的行
continue
for c in range(ncols):
strCellValue = ''
objName = str(table.cell_value(1,c))
global g_objName
g_objName= objName
if(objName.find("@") >= 0):#@打头的列为注释,直接跳过
continue
if r <= 2:
continue
objType = str(table.cell_value(2,c))
if objType=='STRING':
strCellValue = str(table.cell_value(r,c)).strip()
print strCellValue.decode('utf-8').encode(type)
if(isContainChinese(strCellValue)):
#the key not in translated dictionary
if not strCellValue in transDict :
unTransDict[strCellValue] = ''
print "--Operate ",table.name," OK----------"
return
def excelToDict(excelFileName,lgFile):
print 'begin trans excel:' + excelFileName
lgFile.write('Excel dir:' + excelFileName)
lgFile.write(u"\r\n")
data = xlrd.open_workbook(excelFileName)
for table in data.sheets():
print "sheet : " + table.name
lgFile.write('\t'+'sheetCO : ' + table.name)
lgFile.write(u"\r\n")
sheetName = table.name.lower()
if (not sheetName.startswith('config')) and (not sheetName.startswith('sheet')) and (not sheetName.startswith('remark')) and (not sheetName.startswith('(')):
if(sheetName=='blackword' or sheetName=='prefix' or sheetName=='suffix'):
continue
try:
table2Dict(table)
except Exception,e:
print Exception,":",e
os.system('pause')
print "trans excel OK"
def csvToDict(csvFileName,lgFile):
print 'begin trans csv:' + csvFileName
lgFile.write('csv file:' + csvFileName)
lgFile.write(u"\r\n")
data = open(csvFileName,"r")
type = sys.getfilesystemencoding()
try:
reader = data.readlines()
for strCellValue in reader:
if(isContainChinese(strCellValue)):
index = strCellValue.find(',')
if index > 0:
val1 = strCellValue[0:index]
val2 = strCellValue[index+1:len(strCellValue)]
#去除首尾空格、首尾双引号,末尾逗号
key = val2.strip()
key = key.rstrip(',')
key = key.strip('\"')
key = key.strip()
print key.decode('utf-8').encode(type)
#the key not in translated dictionary
if not key in transDict :
unTransDict[key] = ''
data.close()
except Exception,e:
print Exception,":",e
os.system('pause')
print "trans csv OK"
def xmlToDict(xmlFileName,destPattern,lgFile):
print 'begin trans xml:' + xmlFileName
lgFile.write('xml file:' + xmlFileName)
lgFile.write(u"\r\n")
data = open(xmlFileName,"r")
type = sys.getfilesystemencoding()
try:
reader = data.read()
dest = re.compile(destPattern)
res = dest.findall(reader)
for elem in res:
print elem
strCellValue = str(elem).strip()
if len(strCellValue) > 0:
if(isContainChinese(strCellValue)):
print strCellValue.decode('utf-8').encode(type)
#the key not in translated dictionary
if not strCellValue in transDict :
unTransDict[strCellValue] = ''
data.close()
except Exception,e:
print Exception,":",e
os.system('pause')
print "trans xml OK"
def walkXmlDir(xmlDir,destPattern,lgFile):
print xmlDir
if not os.path.exists(xmlDir):
lgFile.write(xmlDir+' xml files dir not exist!!!')
lgFile.write(u"\r\n")
os.system('pause')
for parent,dirnames,filenames in os.walk(xmlDir):
for filename in filenames:
if filename.endswith(".xml") :
print 'filename : ' + filename
excelFileName = os.path.join(parent, filename)
xmlToDict(excelFileName,destPattern,lgFile)
def extractXml(lgFile):
lgFile.write('==========================Begin extract xml files==================')
lgFile.write(u"\r\n")
walkXmlDir(uiDir, uiPattern, lgFile)
walkXmlDir(scenesDir, scenesPattern, lgFile)
walkXmlDir(itemDir, itemsPattern, lgFile)
if __name__ == '__main__':
reload(sys)
sys.setdefaultencoding( "utf-8" )
#if os.path.isdir(dictDir):
if not os.path.exists(dictDir):
os.makedirs(dictDir)
try:
if os.path.exists(translatedFile):
loadTranslatedDict()
lgFile = codecs.open(logFile,"w","utf-8")
#extract xml file
extractXml(lgFile)
print csvDir
if not os.path.exists(csvDir):
lgFile.write(csvDir+' csv files dir not exist!!!')
lgFile.write(u"\r\n")
os.system('pause')
lgFile.write('==========================Begin extract csv files==================')
lgFile.write(u"\r\n")
for parent,dirnames,filenames in os.walk(csvDir):
for filename in filenames:
print 'filename : ' + filename
excelFileName = os.path.join(parent, filename)
csvToDict(excelFileName,lgFile)
print excelDir
lgFile.write('==========================Begin extract excel files==================')
lgFile.write(u"\r\n")
for parent,dirnames,filenames in os.walk(excelDir):
for filename in filenames:
if not filename.startswith("~$"):
sufix = os.path.splitext(filename)[1][1:]
# print('sufix:' + sufix);
if sufix == 'xls' or sufix == 'xlsx':
print 'filename : ' + filename
excelFileName = os.path.join(parent, filename)
excelToDict(excelFileName,lgFile)
lgFile.write('==========================All OK==================')
lgFile.close()
book = Workbook(encoding='utf-8')
sheet1 = book.add_sheet('Sheet 1')
row = 0;
col = 0;
for item in unTransDict.keys():
sheet1.write(row,col,str(item))
row += 1
book.save(unTranslateFile)
except Exception,e:
print Exception,":",e
# os.system('pause')