zoukankan      html  css  js  c++  java
  • python脚本从excel表到处数据,生成指定格式的文件

    #coding:gbk
    #导入处理excel的模块
    import xlrd
    
    #定义哪些字段须要推断,仅仅支持时间字段
    toSureColArray = ['CREATE_TIME','MODIFY_TIME']
    
    #确定某个字段是否在数组中
    def isColInArray(colName, colArray):
     for i in range(0, len(colArray)):
        if (colName == colArray[i]):
            return 1
        else:
            return 0
     		
     		
    #定义子sheet字段属性映射处理函数
    #入參为文件描写叙述符、、源表列字段、和目表列字段
    def childSheetColFunc(fOutput, sourceTabCol, destTabCol,destTableSureArray):
        for i in range(2,len(sourceTabCol)):
            if len(destTabCol[i]) != 0:
                if len(sourceTabCol[i]) != 0:
    		#在子表中,假设浪潮int_id相应的直真字段英文名称为空,在destTableSureArry不存在INT_ID属性
                    destTableSureArray.append(str(destTabCol[i]).upper())
                    fOutput.write("					A."+str(sourceTabCol[i]).upper()+" "+str(destTabCol[i]).upper()+",
    ")
                else:
                    continue
            else:
                continue
        #for i in range(0,len(destTableSureArray)):
        #    print("******************")
        #    print(str(destTableSureArray[i]))
        #    print("******************")
            
        #对creat_time和modify_time做单独处理
        for i in range(0,len(toSureColArray)):
            if isColInArray(toSureColArray[i],destTableSureArray) == 0:
                fOutput.write("					SYSDATE "+toSureColArray[i]+",
    ")
                destTableSureArray.append(toSureColArray[i])
    
    
    #定义子sheet目标数据插入函数主键模块
    #入參为文件描写叙述符、源表列字段、目表源字段
    def childSheetColDesKeyFunc(fOutput, sourceTabCol, destTabCol):
        #假设为空表,此处会报下标溢出错误,所以入參必须保证表中有数据
        if len(sourceTabCol[2]) != 0:
            fOutput.write("				<col name=""+str(destTabCol[2]).upper()+"">["+str(destTabCol[2]).upper()+"]</col>
    ")
        fOutput.write("				<col name="STATEFLAG">[STATEFLAG]</col>
    ")
    
    
    	
    #定义子sheet目标函数插入函数非主键模块
    def childSheetColDesNKeyFunc(fOutput, sourceTabCol, destTableSureArray):
        if len(sourceTabCol[2]) != 0:
            for i in range(1,len(destTableSureArray)):
                fOutput.write("				<col name=""+destTableSureArray[i]+"">["+destTableSureArray[i]+"]</col>
    ")
        else:
            for i in range(0,len(destTableSureArray)): 
                fOutput.write("				<col name=""+destTableSureArray[i]+"">["+destTableSureArray[i]+"]</col>
    ")
    
    #定义子sheet处理函数
    def childSheetFunc(sheetName, sourceTable, destTable):
        #依据sheet名打开表
        shtInstance=workBook.sheet_by_name(sheetName)
        #存放终于哪些浪潮字段须要映射
        destTableSureArray = []
        
        langchaoTabCol=shtInstance.col_values(4)
        zhizhenTabCol=shtInstance.col_values(6)
        print("***********如今開始生成"+str(destTable).upper()+".xml 文件***********")
        path="e:\"+destTable.upper()+".xml"
        fOutput=open(path,"w")
        fOutput.write("<?

    xml version="1.0" encoding="gb2312"?

    > ") fOutput.write("<Conf> ") fOutput.write(" <stage id="1" describe=""+str(sourceTable).upper()+"" doUpdate="$doUpdate$"> ") fOutput.write(" <drawout DBid="ZZ"> ") fOutput.write(" <![CDATA[ ") fOutput.write(" SELECT ") fOutput.write(" 0 STATEFLAG, ") childSheetColFunc(fOutput, zhizhenTabCol, langchaoTabCol,destTableSureArray) #fOutput.write(" SYSDATE STATEFLAG ") fOutput.write(" FROM INFORMIX."+str(sourceTable).upper()+" A ") fOutput.write(" WHERE 1=1 ") fOutput.write(" AND ROW_NUM < 2 ") fOutput.write(" ]]> ") fOutput.write(" </drawout> ") fOutput.write(" <Load DBid="IRMS_143" tableName=""+str(destTable).upper()+"" ") fOutput.write(" <Dimension> ") childSheetColDesKeyFunc(fOutput, zhizhenTabCol, langchaoTabCol) fOutput.write(" <Dimension> ") fOutput.write(" <Cols> ") childSheetColDesNKeyFunc(fOutput, zhizhenTabCol, destTableSureArray) fOutput.write(" <Cols> ") fOutput.write(" </Load> ") fOutput.write(" </stage> ") fOutput.write("</Conf> ") fOutput.close() print("***********"+str(destTable).upper()+".xml 文件生成完毕***********") #依据主表获取子表信息并处理 def mainSheetAndProc(mainSheet): sheetName=mainSheet.col_values(2) sourceTabName=mainSheet.col_values(5) destTabName=mainSheet.col_values(3) curNum = 0 for i in range(2,len(sheetName)): if len(sheetName[i]) ==0: continue curNum += 1 print(">>>>>>開始生成第"+str(curNum)+"个文件") childSheetFunc(sheetName[i], sourceTabName[i], destTabName[i]) #入口函数 if __name__=="__main__": workBook=xlrd.open_workbook("E:\内线比对模型.xls") mainSheet=workBook.sheets()[0] mainSheetAndProc(mainSheet)


  • 相关阅读:
    深入了解JVM-方法区
    Mysql性能调优
    基督教 犹太  新教  东正教 天主教
    caffe的matlab接口一览表
    ubuntu下 编译Caffe的Matlab接口
    Linux入门学习教程:虚拟机体验之KVM篇
    利用proxychains在终端使用socks5代理
    process lasso 优化原理
    解决win7和ubuntu双系统ubuntu不能上网的问题
    调试minix内核
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5403831.html
Copyright © 2011-2022 走看看