#!/usr/bin/python
|
# -*- coding: GBK -*-
|
#-------------------------------------------------------------------------------
|
#
|
##@package Code.gamecfg_export
|
#
|
# @todo:ÓÎÏ·¿Í»§¶Ë·þÎñ¶ËÅäÖÃÎļþµ¼³ö
|
# @author hxp
|
# @date 2017-07-19
|
# @version 1.0
|
#
|
# ÏêϸÃèÊö: ¸ù¾Ý²ß»®ÅäÖõÄĸ±í¸ñµ¼³ö¿Í»§¶Ë·þÎñ¶Ë³ÌÐòʹÓõÄÅäÖÃÎļþ
|
#
|
#-------------------------------------------------------------------------------
|
#"""Version = 2017-07-19 12:00"""
|
#-------------------------------------------------------------------------------
|
|
import ctypes
|
import ConfigParser
|
import xlrd
|
import sys
|
import os
|
|
####################################################################################################
|
|
STD_INPUT_HANDLE = -10
|
STD_OUTPUT_HANDLE = -11
|
STD_ERROR_HANDLE = -12
|
|
# ×ÖÌåÑÕÉ«¶¨Òå ,¹Ø¼üÔÚÓÚÑÕÉ«±àÂ룬ÓÉ2λʮÁù½øÖÆ×é³É£¬·Ö±ðÈ¡0~f£¬Ç°Ò»Î»Ö¸µÄÊDZ³¾°É«£¬ºóһλָµÄÊÇ×ÖÌåÉ«
|
#ÓÉÓڸú¯ÊýµÄÏÞÖÆ£¬Ó¦¸ÃÊÇÖ»ÓÐÕâ16ÖÖ£¬¿ÉÒÔǰ¾°É«Óë±³¾°É«×éºÏ¡£Ò²¿ÉÒÔ¼¸ÖÖÑÕɫͨ¹ý»òÔËËã×éºÏ£¬×éºÏºó»¹ÊÇÔÚÕâ16ÖÖÑÕÉ«ÖÐ
|
|
# Windows CMDÃüÁîÐÐ ×ÖÌåÑÕÉ«¶¨Òå text colors
|
FOREGROUND_BLACK = 0x00 # black.
|
FOREGROUND_DARKBLUE = 0x01 # dark blue.
|
FOREGROUND_DARKGREEN = 0x02 # dark green.
|
FOREGROUND_DARKSKYBLUE = 0x03 # dark skyblue.
|
FOREGROUND_DARKRED = 0x04 # dark red.
|
FOREGROUND_DARKPINK = 0x05 # dark pink.
|
FOREGROUND_DARKYELLOW = 0x06 # dark yellow.
|
FOREGROUND_DARKWHITE = 0x07 # dark white.
|
FOREGROUND_DARKGRAY = 0x08 # dark gray.
|
FOREGROUND_BLUE = 0x09 # blue.
|
FOREGROUND_GREEN = 0x0a # green.
|
FOREGROUND_SKYBLUE = 0x0b # skyblue.
|
FOREGROUND_RED = 0x0c # red.
|
FOREGROUND_PINK = 0x0d # pink.
|
FOREGROUND_YELLOW = 0x0e # yellow.
|
FOREGROUND_WHITE = 0x0f # white.
|
|
# Windows CMDÃüÁîÐÐ ±³¾°ÑÕÉ«¶¨Òå background colors
|
BACKGROUND_BLUE = 0x10 # dark blue.
|
BACKGROUND_GREEN = 0x20 # dark green.
|
BACKGROUND_DARKSKYBLUE = 0x30 # dark skyblue.
|
BACKGROUND_DARKRED = 0x40 # dark red.
|
BACKGROUND_DARKPINK = 0x50 # dark pink.
|
BACKGROUND_DARKYELLOW = 0x60 # dark yellow.
|
BACKGROUND_DARKWHITE = 0x70 # dark white.
|
BACKGROUND_DARKGRAY = 0x80 # dark gray.
|
BACKGROUND_BLUE = 0x90 # blue.
|
BACKGROUND_GREEN = 0xa0 # green.
|
BACKGROUND_SKYBLUE = 0xb0 # skyblue.
|
BACKGROUND_RED = 0xc0 # red.
|
BACKGROUND_PINK = 0xd0 # pink.
|
BACKGROUND_YELLOW = 0xe0 # yellow.
|
BACKGROUND_WHITE = 0xf0 # white.
|
|
# get handle
|
std_out_handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
|
|
def set_cmd_text_color(color, handle=std_out_handle):
|
Bool = ctypes.windll.kernel32.SetConsoleTextAttribute(handle, color)
|
return Bool
|
|
#reset white
|
def resetColor():
|
set_cmd_text_color(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
|
return
|
|
#°µºìÉ«
|
#dark red
|
def printDarkRed(mess):
|
set_cmd_text_color(FOREGROUND_DARKRED)
|
sys.stdout.write(mess)
|
resetColor()
|
return
|
|
#ºìÉ«
|
#red
|
def printRed(mess, newLine=True):
|
set_cmd_text_color(FOREGROUND_RED)
|
sys.stdout.write(mess)
|
if newLine:
|
sys.stdout.write("\n")
|
resetColor()
|
return
|
|
####################################################################################################
|
|
cfg = ConfigParser.ConfigParser()
|
if os.path.exists("config2.ini"):
|
cfg.read("config2.ini")
|
else:
|
cfg.read("config.ini")
|
ClientRootPath = cfg.get("config", "ClientRootPath")
|
ServerRootPath = cfg.get("config", "ServerRootPath")
|
|
print "ClientRootPath: %s" % ClientRootPath
|
print "ServerRootPath: %s" % ServerRootPath
|
|
ClientRootPathList = [ClientRootPath]
|
for i in xrange(1, 6):
|
if not cfg.has_option("config", "ClientRootPath%s" % i):
|
break
|
ClientRootPathEx = cfg.get("config", "ClientRootPath%s" % i)
|
ClientRootPathList.append(ClientRootPathEx)
|
|
ServerRootPathList = [ServerRootPath]
|
for i in xrange(1, 6):
|
if not cfg.has_option("config", "ServerRootPath%s" % i):
|
break
|
serverRootPathEx = cfg.get("config", "ServerRootPath%s" % i)
|
ServerRootPathList.append(serverRootPathEx)
|
if len(ServerRootPathList) > 1:
|
print "ServerRootPathList: %s" % ServerRootPathList
|
|
ExportSign = ["C", "G", "S", "M", ""]
|
def GetExportSign(value):
|
exportSign = ""
|
upperSign = value.upper().replace(" ", "")
|
for s in upperSign:
|
if s not in ExportSign or s in exportSign:
|
return None
|
exportSign += s
|
return upperSign
|
|
Encoding = "gbk"
|
EncodingSpec = eval(cfg.get("config", "EncodingSpec"))
|
|
def DoExportCfgFile(fileName, exportInfo):
|
encoding = Encoding
|
for e, f in EncodingSpec.items():
|
if fileName in f:
|
encoding = e
|
break
|
sys.setdefaultencoding(encoding)
|
print "----------------------------"
|
filePath = exportInfo[0]
|
clientPath = exportInfo[1]
|
clientFileName = exportInfo[2]
|
serverPath = exportInfo[3]
|
serverFileName = exportInfo[4]
|
pkInfo = exportInfo[5]
|
|
exportContent = __GetFileExportContent(filePath, pkInfo)
|
if not exportContent:
|
return
|
gServerCfg, mServerCfg, serverCfg, clientCfg = exportContent
|
|
if not gServerCfg and not mServerCfg and not serverCfg and not clientCfg:
|
printRed("ÅäÖÃÎļþÎÞЧ£¡%s" % (filePath))
|
return
|
|
print "¿ªÊ¼µ¼±í: %s" % filePath
|
# unicodeÖеġ®\xa0¡¯×Ö·ûÔÚת»»³Égbk±àÂëʱ»á³öÏÖÎÊÌ⣬gbkÎÞ·¨×ª»»'\xa0'×Ö·û
|
# ËùÒÔ£¬ÔÚת»»µÄʱºò±ØÐè½øÐÐһЩǰÖö¯×÷ string.replace(u'\xa0', u' ')
|
if gServerCfg:
|
for ServerRootPath in ServerRootPathList:
|
gServerCfgName = ServerRootPath + "\CoreServerGroup\GameServer\PySysDB" + "\%s.txt" % serverFileName
|
fp = open(gServerCfgName, "w")
|
for c in gServerCfg:
|
fp.write("%s\n" % (c.replace(u'\xa0', u' ')))
|
fp.close()
|
print "µ¼³öGameServer: %s" % gServerCfgName
|
|
if mServerCfg:
|
for ServerRootPath in ServerRootPathList:
|
mServerCfgName = ServerRootPath + "\db\PyMongoDataServer\PySysDB" + "\%s.txt" % serverFileName
|
fp = open(mServerCfgName, "w")
|
for c in mServerCfg:
|
fp.write("%s\n" % (c.replace(u'\xa0', u' ')))
|
fp.close()
|
print "µ¼³öMapServer: %s" % mServerCfgName
|
|
if serverCfg:
|
for ServerRootPath in ServerRootPathList:
|
serverCfgName = ServerRootPath + serverPath + "\%s.txt" % serverFileName
|
fp = open(serverCfgName, "w")
|
for c in serverCfg:
|
fp.write("%s\n" % (c.replace(u'\xa0', u' ')))
|
fp.close()
|
print "µ¼³ö·þÎñ¶Ë: %s" % serverCfgName
|
|
if clientCfg:
|
for ClientRootPath in ClientRootPathList:
|
sys.setdefaultencoding("utf8") # ǰ¶ËĬÈϱàÂë
|
clientCfgName = ClientRootPath + clientPath + "\%s.txt" % clientFileName
|
fp = open(clientCfgName, "w")
|
for c in clientCfg:
|
fp.write("%s\n" % (c.replace(u'\xa0', u' ')))
|
fp.close()
|
print "µ¼³ö¿Í»§¶Ë: %s" % clientCfgName
|
|
return True
|
|
def __GetFileExportContent(filePath, pkInfo):
|
gServerCfg = []
|
mServerCfg = []
|
serverCfg = []
|
clientCfg = []
|
gServerCfgColList = [] # gameServer·þÎñ¶ËÅäÖÃËùÐèÒªµÄÁÐË÷ÒýÁбí
|
mServerCfgColList = [] # mapServer·þÎñ¶ËÅäÖÃËùÐèÒªµÄÁÐË÷ÒýÁбí - ¶îÍâµÄ
|
serverCfgColList = [] # ·þÎñ¶ËÅäÖÃËùÐèÒªµÄÁÐË÷ÒýÁбí
|
clientCfgColList = [] # ¿Í»§¶ËÅäÖÃËùÐèÒªµÄÁÐË÷ÒýÁбí
|
gServerCfgRowList = [] # gameServer·þÎñ¶ËÅäÖÃËùÐèÒªµÄÐÐË÷ÒýÁбí
|
mServerCfgRowList = [] # mapServer·þÎñ¶ËÅäÖÃËùÐèÒªµÄÐÐË÷ÒýÁбí - ¶îÍâµÄ
|
serverCfgRowList = [] # ·þÎñ¶ËÅäÖÃËùÐèÒªµÄÐÐË÷ÒýÁбí
|
clientCfgRowList = [] # ¿Í»§¶ËÅäÖÃËùÐèÒªµÄÐÐË÷ÒýÁбí
|
|
data = xlrd.open_workbook(filePath)
|
table = data.sheet_by_index(0) # ĬÈÏÖ»½âÎöµÚÒ»ÕŹ¤×÷±í
|
nrows = table.nrows # ÐÐÊý
|
ncols = table.ncols # ÁÐÊý
|
if not nrows or not ncols:
|
printRed("ÅäÖÃÎļþÎÞÊý¾Ý£¡%s" % (filePath))
|
return
|
|
# ÕÒ³öÐèÒªµ¼³öµÄÁÐ, SCÅäÖÃÐèÒª×ö¾«È·Æ¥Åä
|
firstRowValuesList = table.row_values(0) # µÚÒ»ÐÐ
|
for col, value in enumerate(firstRowValuesList):
|
if not (isinstance(value, unicode) or isinstance(value, str)):
|
continue
|
upperValue = GetExportSign(value)
|
if upperValue == None:
|
continue
|
if "G" in upperValue:
|
gServerCfgColList.append(col)
|
if "M" in upperValue:
|
mServerCfgColList.append(col)
|
if "S" in upperValue:
|
serverCfgColList.append(col)
|
if "C" in upperValue:
|
clientCfgColList.append(col)
|
|
# ÕÒ³öÐèÒªµ¼³öµÄÐÐ, SCÅäÖÃÐèÒª×ö¾«È·Æ¥Åä
|
firstColValuesList = table.col_values(0) # µÚÒ»ÁÐ
|
for row, value in enumerate(firstColValuesList):
|
if not (isinstance(value, unicode) or isinstance(value, str)):
|
continue
|
upperValue = GetExportSign(value)
|
if upperValue == None:
|
continue
|
if "G" in upperValue:
|
gServerCfgRowList.append(row)
|
if "M" in upperValue:
|
mServerCfgRowList.append(row)
|
if "S" in upperValue:
|
serverCfgRowList.append(row)
|
if "C" in upperValue:
|
clientCfgRowList.append(row)
|
|
# ×î¶àÖ»µ¼Ò»Áеģ¬ÕâÖÖ±íµÚÒ»ÁÐΪµ¼³öÐÐÅäÖÃ
|
if ncols > 1 and (not gServerCfgColList or gServerCfgColList == [0]) and (not mServerCfgColList or mServerCfgColList == [0]) \
|
and (not serverCfgColList or serverCfgColList == [0]) and (not clientCfgColList or clientCfgColList == [0]):
|
gServerCfgColList = []
|
mServerCfgColList = []
|
serverCfgColList = []
|
clientCfgColList = []
|
|
# ×î¶àÖ»µ¼Ò»Ðеģ¬ÕâÖÖ±íµÚÒ»ÐÐΪµ¼³öÁÐÅäÖÃ
|
if (not gServerCfgRowList or gServerCfgRowList == [0]) and (not mServerCfgRowList or mServerCfgRowList == [0]) \
|
and (not serverCfgRowList or serverCfgRowList == [0]) and (not clientCfgRowList or clientCfgRowList == [0]):
|
gServerCfgRowList = []
|
mServerCfgRowList = []
|
serverCfgRowList = []
|
clientCfgRowList = []
|
|
# 1-µÚÒ»ÐÐΪµ¼³öSCÅäÖã»2-µÚÒ»ÁÐΪµ¼³öSCÅäÖã»3-µÚÒ»ÐÐÁоùΪµ¼³öSCÅäÖÃ
|
if (gServerCfgColList or mServerCfgColList or serverCfgColList or clientCfgColList) \
|
and (gServerCfgRowList or mServerCfgRowList or serverCfgRowList or clientCfgRowList):
|
exportType = 3 # ÐÐÁе¼³ö£¬Ê×ÐÐÊ×ÁÐΪµ¼³öÅäÖÃ
|
elif gServerCfgColList or mServerCfgColList or serverCfgColList or clientCfgColList:
|
exportType = 1 # °´Áе¼³ö£¬Ê×ÐÐΪµ¼³öÅäÖÃ
|
elif gServerCfgRowList or mServerCfgRowList or serverCfgRowList or clientCfgRowList:
|
exportType = 2 # °´Ðе¼³ö£¬Ê×ÁÐΪµ¼³öÅäÖÃ
|
# µ±½öÊ×ÁÐΪSCÅäÖÃʱ£¬µ¼³öµÄÁÐΪ³ýÁËÊ×ÁÐÍâµÄÈ«²¿
|
gServerCfgColList = range(1, ncols)
|
mServerCfgColList = range(1, ncols)
|
serverCfgColList = range(1, ncols)
|
clientCfgColList = range(1, ncols)
|
else:
|
printRed('Îļþµ¼³ö¿Í»§¶Ë·þÎñ¶ËSCÅäÖôíÎ󣡽ö¿ÉÒÔÉ趨%sÖеÄÒ»ÖÖ»ò¶àÖÖ×éºÏ£¡' % ExportSign)
|
return
|
|
isFirstRowSC = exportType in [1, 3] # Ê×ÐÐÊÇ·ñSCµ¼³öÅäÖÃ
|
|
cfgKeyList = [] # ËùÓÐÅäÖÃÊý¾ÝµÄÖ÷¼ükeyÁбí, ÓÃÓÚÅжÏÊÇ·ñÖØ¸´key
|
pkFormat = ""
|
pkColList = [] # Ö÷¼ü×éºÏ×Ö¶ÎÁÐË÷Òý
|
pkList = pkInfo.split("|")
|
for i, pk in enumerate(pkList):
|
pkList[i] = pk.upper()
|
# ×Ö¶ÎÃûÐÐ
|
fieldRow = 2 if isFirstRowSC else 1
|
fieldRowValuesList = table.row_values(fieldRow) # ×Ö¶ÎÃûÐÐ
|
for col, value in enumerate(fieldRowValuesList):
|
if value.upper() in pkList:
|
pkColList.append(col)
|
pkFormat += "%s=%%s, " % value
|
|
# µ±ÐÐΪSCÅäÖÃʱ, ·þÎñ¶ËÌØÊâÐбàºÅ1,3Ðв»µ¼£» ÁÐΪSCÅäÖÃʱ£¬ÓÉÁÐÖ±½ÓÅäÉÏÈ¥, ÕâÀï¾Í²»ÔÙ×ö´¦Àí
|
serverIgnoreRow = [1, 3] if isFirstRowSC else [] # gameServerͨÓÃ
|
|
gServerFormat = "%s" + "\t%s"*(len(gServerCfgColList) - 1)
|
mServerFormat = "%s" + "\t%s"*(len(mServerCfgColList) - 1)
|
serverFormat = "%s" + "\t%s"*(len(serverCfgColList) - 1)
|
clientFormat = "%s" + "\t%s"*(len(clientCfgColList) - 1)
|
|
for row in xrange(nrows):
|
# Ê×ÐÐΪSCÅäÖÃʱ²»µ¼
|
if row == 0 and isFirstRowSC:
|
continue
|
|
rowValuesList = table.row_values(row)
|
# ¸¡µãÐÍתΪint
|
for i, v in enumerate(rowValuesList):
|
if type(v) != float:
|
continue
|
#ÓÅÏÈʹÓÃת×Ö·û´®ºóÔÙÈ¡Õû£¬·ÀÖ¹ÒòΪ¾«¶Èµ¼ÖµÄСÊýÎÊÌâ
|
strV = str(v)
|
if strV.endswith(".0"):
|
strV = strV[:-2]
|
rowValuesList[i] = int(strV)
|
continue
|
intV = int(v)
|
if intV == v:
|
rowValuesList[i] = intV
|
|
isAdd = False
|
if (exportType == 1 or row in gServerCfgRowList) and row not in serverIgnoreRow and gServerCfgColList:
|
isAdd = True
|
gServerCfg.append(gServerFormat % tuple([rowValuesList[i] for i in gServerCfgColList]))
|
|
if (exportType == 1 or row in mServerCfgRowList) and row not in serverIgnoreRow and mServerCfgColList:
|
isAdd = True
|
mServerCfg.append(mServerFormat % tuple([rowValuesList[i] for i in mServerCfgColList]))
|
|
if (exportType == 1 or row in serverCfgRowList) and row not in serverIgnoreRow and serverCfgColList:
|
isAdd = True
|
serverCfg.append(serverFormat % tuple([rowValuesList[i] for i in serverCfgColList]))
|
|
if (exportType == 1 or row in clientCfgRowList) and clientCfgColList:
|
isAdd = True
|
# Ìæ»»µ¼³öµ½¿Í»§¶ËÓõĹ«Ê½ÔËËã·û
|
for col, cfgStr in enumerate(rowValuesList):
|
cfgFormula = __RepalceClientCfgFormula(cfgStr)
|
if cfgFormula is None:
|
printRed("Ìæ»»¹«Ê½Ê§°Ü£¡µÚ%sÐУ¬µÚ%sÁС£" % (row + 1, col + 1))
|
return
|
rowValuesList[col] = cfgFormula
|
if row == 3:
|
# ˵Ã÷ÐУ¬Ìæ»»»»Ðзû£¬·Àֹǰ¶Ë¼ÓÔØ±í¸ñ±¨´í
|
clientCfg.append(clientFormat % tuple([rowValuesList[i].replace("\r", "").replace("\n", "") for i in clientCfgColList]))
|
else:
|
clientCfg.append(clientFormat % tuple([rowValuesList[i] for i in clientCfgColList]))
|
|
if isAdd and pkColList:
|
cfgKey = pkFormat % tuple([rowValuesList[pkCol] for pkCol in pkColList])
|
if cfgKey in cfgKeyList:
|
printRed("%s KeyÖØ¸´£º%s, µÚ%sÐС£" % (filePath, cfgKey, row + 1))
|
return
|
cfgKeyList.append(cfgKey)
|
|
return gServerCfg, mServerCfg, serverCfg, clientCfg
|
|
def __RepalceClientCfgFormula(formula):
|
# Ìæ»»µ¼³öµ½¿Í»§¶ËÓõĹ«Ê½, Ö»×öÔËËã·ûÌæ»»¼´¿É
|
if type(formula) not in [str, unicode]:
|
return formula
|
if "(" not in formula and ")" not in formula:
|
return formula
|
if u"£¨" in formula or u"£©" in formula:
|
printRed("¹«Ê½ÖÐÇëʹÓÃÓ¢ÎÄÀ¨ºÅ: %s" % formula)
|
return
|
#print "³õʼ: len=%s, %s" % (len(formula), formula)
|
formula = formula.replace(" ", "")
|
formula = formula.replace("random.random()", "(0;1)")
|
start = 0
|
doCnt = 0
|
while doCnt < 1000:
|
doCnt += 1
|
#print " %s, %s" % (start, formula)
|
right = formula.find(")", start)
|
if right == -1:
|
if "min(" in formula or "max(" in formula or "math.ceil(" in formula or "int(" in formula \
|
or "math.sqrt(" in formula or "pow(" in formula or "random.randint(" in formula:
|
start = 0 # ´ÓÍ·¿ªÊ¼
|
continue
|
else:
|
#print "ûÓпÉÌæ»»µÄÔËËã·ûÁË"
|
break
|
|
f = None
|
if f == None:
|
f = __DoReplacePyFunc(formula, right, "min(", 2, "{<[%s!%s]>}")
|
if f == None:
|
f = __DoReplacePyFunc(formula, right, "max(", 2, "{<[%s@%s]>}")
|
if f == None:
|
f = __DoReplacePyFunc(formula, right, "random.randint(", 2, "{<[%s~%s]>}") # ÐèÔÚint֮ǰ´¦Àí
|
if f == None:
|
f = __DoReplacePyFunc(formula, right, "int(", 1, "{<[%s#]>}")
|
if f == None:
|
f = __DoReplacePyFunc(formula, right, "math.ceil(", 1, "{<[%s$]>}")
|
if f == None:
|
f = __DoReplacePyFunc(formula, right, "math.sqrt(", 1, "{<[%s&]>}")
|
if f == None:
|
f = __DoReplacePyFunc(formula, right, "pow(", 2, "{<[%s^%s]>}")
|
|
# ¶¼ÕÒ²»µ½Æ¥ÅäµÄº¯ÊýÇé¿öÏ£¬¾ÍÊÇ´¿´âµÄ()À¨ÆðÀ´¼ÓÇ¿ÔËËãÓÅÏȼ¶µÄ£¬ÏÈÌæ»»Îª{<[]>}£¬Ö®ºóÔÙͳһ»»»ØÈ¥
|
if f == None:
|
f = __DoReplacePyFunc(formula, right, "(", 1, "{<[%s]>}")
|
|
if f != None:
|
formula = f
|
start = right + 1
|
if doCnt >= 1000:
|
printRed("Ìæ»»¹«Ê½Ö´ÐдÎÊýÒì³£: %s" % formula)
|
return
|
|
formula = formula.replace("{<[", "(")
|
formula = formula.replace("]>}", ")")
|
#print "Ìæ»»½á¹û: %s" % formula
|
return formula
|
|
def __DoReplacePyFunc(formula, right, funcStr, funcParamCnt, replaceStr):
|
## Ìæ»»pyÔËË㺯ÊýΪ¿Í»§¶Ë¿ÉÓøñʽ
|
left = formula.rfind(funcStr, 0, right) # ´ÓºóÍùǰÕÒ³öµÚÒ»¸öÆ¥ÅäµÄº¯Êý
|
if left == -1:
|
return
|
pyFuncStr = formula[left:right + 1]
|
paramStr = pyFuncStr[len(funcStr):-1]
|
if "(" in paramStr or ")" in paramStr:
|
#print " º¯Êý²ÎÊýÄÚÈÝÀïÓжàÓàÀ¨ºÅ²»´¦Àí: %s, %s" % (pyFuncStr, paramStr)
|
return
|
|
# ûÓвÎÊýµÄpyº¯ÊýÔÚ¿ªÊ¼Ö±½Ó¾«×¼Ìæ»»£¬Èç random.random()
|
if funcParamCnt == 2:
|
commaIndex = paramStr.find(",") # ¶ººÅË÷Òý
|
return formula.replace(pyFuncStr, replaceStr % (paramStr[:commaIndex], paramStr[commaIndex + 1:]))
|
elif funcParamCnt == 1:
|
return formula.replace(pyFuncStr, replaceStr % paramStr)
|
|
return
|
|
def Main():
|
print 'Number of arguments:', len(sys.argv), 'arguments.'
|
# ÔªËØ0Ϊ×ÔÉíÄ£¿éÃû£¬²»´¦Àí£¬´ÓÔªËØ1¿ªÊ¼´¦Àí
|
reload(sys)
|
sys.setdefaultencoding(Encoding)
|
|
exportDict = {}
|
for filePath in sys.argv[1:]:
|
|
fileBaseName = os.path.basename(filePath) # ÎļþÃû£¬º¬À©Õ¹Ãû
|
fileExtension = os.path.splitext(filePath)[-1] # À©Õ¹Ãû
|
fileName = fileBaseName.replace(fileExtension, "") # ²»º¬À©Õ¹Ãû
|
|
# Ö»´¦ÀíexcelÎļþ
|
if "xls" not in fileExtension:
|
printRed("²»´¦Àí¸ÃÎļþ,ÔÝʱֻµ¼excelÎļþ£¡%s" % filePath)
|
continue
|
exportDict[fileName] = filePath
|
|
clientFileNameList = []
|
serverFileNameList = []
|
exportInfoDict = {}
|
exportMapFile = open("TableExportMap.txt", 'r')
|
for line in exportMapFile.readlines():
|
#if not exportDict:
|
# break
|
exportMapInfo = line.split('\t')
|
fileName = exportMapInfo[0]
|
clientFileName = exportMapInfo[2]
|
serverFileName = exportMapInfo[4]
|
|
if clientFileName in clientFileNameList:
|
printRed("µ¼³öǰ¶ËÎļþÃûÖØ¸´£¡%s -> %s" % (fileName, clientFileName))
|
return
|
if clientFileName and clientFileName != "-":
|
clientFileNameList.append(clientFileName)
|
|
if serverFileName in serverFileNameList:
|
printRed("µ¼³ö·þÎñ¶ËÎļþÃûÖØ¸´£¡%s -> %s" % (fileName, serverFileName))
|
return
|
if serverFileName and serverFileName != "-":
|
serverFileNameList.append(serverFileName)
|
|
if fileName not in exportDict:
|
continue
|
filePath = exportDict.pop(fileName)
|
exportInfoDict[fileName] = [filePath] + exportMapInfo[1:]
|
exportMapFile.close()
|
|
if exportDict:
|
for filePath in exportDict.values():
|
printRed("ÇëÅäÖÃÅäÖÃ±íµ¼³ö·¾¶£¡%s" % filePath)
|
return
|
|
exportCount = 0
|
for fileName, exportInfo in exportInfoDict.items():
|
if not DoExportCfgFile(fileName, exportInfo):
|
printRed("µ¼±íʧ°Ü! %s" % fileName)
|
break
|
exportCount += 1
|
|
print "----------------------------"
|
print "³É¹¦µ¼±íÊý: %s" % exportCount
|
print "----------------------------"
|
return
|
|
if __name__ == "__main__":
|
Main()
|
|