zoukankan      html  css  js  c++  java
  • 文件替换

    #!/usr/bin/python
    #Filename :smelter_repalce.py
    # -*- coding:utf-8 -*-
    
    import cx_Oracle
    import sys
    import getopt,string
    import re
    import os
    import datetime
    import os.path
    import configuration
    from Common import *
    
    class replace(object):
        def __init__(self):
            pass
            
    
        def conn_db(self):
            try: 
                job_config=configuration.configuration()
                user_name=job_config.loadConfigFile('config_test.xml','user_name')
                user_password=job_config.loadConfigFile('config_test.xml','user_password')
                dns=job_config.loadConfigFile('config_test.xml','dns')
                db=cx_Oracle.connect(user_name,user_password,dns)
                return db
            except Exception as e:                                                         
                print (-1,e)
           
    
        def c_process_id(self,pid):
            db=self.conn_db()
            cursor=db.cursor()
            pro_pid=cursor.var(cx_Oracle.NUMBER)
            cursor.callproc("common.process_id",[pid,pro_pid])
            return pro_pid.getvalue()
            db.close()
            
        def prhelp(self):
            print ''' Usage: smelter_colmerge.py [options]
            Options:     
            -h, --help            show this help message and exit
            -i, --interid         input inter id 
            -d, --dayid           input file date
            -b, --before          input before type code
            -n, --processid       input process id
            -o, --origin          input original string
            -r, --new             input new string
            -m, --mode            input mode,value f(full) or v(vague)
    
             
    
            Example: python smelter_replace.py -n 100008000 -i 25 -d 20120531 -b FILE_COLLECT -o women -r nimen -m f       
               
            '''
        #Parameters processing   
        def fun_param_input(self):        
            try:
                if len(sys.argv) > 14:
                    opts, args = getopt.getopt(sys.argv[1:],"i:d:b:n:o:r:m:h", ["interid=","dayid=","before=","processid=","origin=","new=","mode=","help"])
                    #print(sys.argv)
                    #print(opts)
                    #print(args)
                    for a,o in opts:
                        if a in ('-i', '--interid'):
                            INTERID=o	
                            #print INTERID
                        elif a in ('-n','--processid'):
                            PROCESSID=o
                            #print PROCESSID
                        elif a in ('-d','--dayid'):
                            #print o    
                            DAYID=o
                        elif a in ('-b','--before'):
                            TYPCD=o
                            #print o
                        elif a in ('-o','--origin'):
                            orig_str=o  
                            #print o  
                        elif a in ('-r','--new'):
                            new_str=o  
                            #print o  
                        elif a in ('-m','--mode'):
                            mode=o  
                            #print o 
                            
                        elif a in ('-h', '--help'):                    
                            self.prhelp()
                            sys.exit()
                            
                    
                    if len(DAYID)==8:
                        date_ymd=DAYID
                        date_h='000000'
                    elif  len(DAYID)==14:
                        date_ymd=DAYID[0:8]
                        date_h=DAYID[8:14]
                    else:
                        print 'Please input right day'
                        self.prhelp()
                        sys.exit()
                    
                    if mode =='f' or mode =='v':
                        #print INTERID,PROCESSID,date_ymd,date_h,TYPCD,orig_str,new_str,mode
                        return INTERID,PROCESSID,date_ymd,date_h,TYPCD,orig_str,new_str,mode
                
                    else:                
                        print 'Please input right mode value'
                        self.prhelp()
                        sys.exit() 
                    
                    
                                                                                      
                else:
                    print 'Please input right parameters'
                    self.prhelp()
                    sys.exit()
            except Exception as e:
                return (-1,e)
                
                
        
        def find_file(self):
            INTERID,PROCESSID,date_ymd,date_h,tp_code,orig_str,new_str,mode=self.fun_param_input()
            #print INTERID,PROCESSID,date_ymd,date_h,tp_code,orig_str,new_str,mode
            db=self.conn_db()
            cursor=db.cursor()        
            dm_t=myexec_type()
            tp_id=dm_t.code_to_id('FILE_REPLACE')
            bf_id =dm_t.code_to_id(tp_code)    
            process_id=self.c_process_id(PROCESSID)
            
            #print "111111111111111111111111111111111111111111"
            #print tp_id,bf_id,process_id       
            cursor.execute('select max(process_id) from log_file where table_id=:tid and data_date=:dt_dt and type_id=:tpp_id and status=\'S\'',tid=INTERID,dt_dt=date_ymd,tpp_id=bf_id)
            c=cursor.fetchall()
            pcsid=c[0][0]
            #print pcsid
    
            cursor.execute('select if_file_name,file_type,file_id,current_directory from log_file where table_id=:tid and data_date=:dt_dt and process_id=:ppid and type_id=:tpp_id and status=\'S\'',tid=INTERID,dt_dt=date_ymd,ppid=pcsid,tpp_id=bf_id)
            a=cursor.fetchall()
            source_file=[]
            i=0
            if len(a)>0:
                while i<len(a):
                    source_file.append(a[i])
                    cursor.callproc("common.Log_file_initial",[process_id,INTERID,source_file[i][2],tp_id,source_file[i][1]])
                    cursor.callproc("common.Log_file_start",[process_id,INTERID,source_file[i][2],tp_id,source_file[i][1],date_ymd,date_h,source_file[i][0],source_file[i][3]])
                    i+=1
                #print i,date_ymd,date_h,tp_id,process_id,mode,INTERID
                return i,source_file,date_ymd,date_h,tp_id,process_id,orig_str,new_str,mode,INTERID
            else:
                return 0,0,0,0,0,0,0
            
            db.close
     
        def fun_replace(self):  
            try:
                db=self.conn_db()
                cursor=db.cursor()
                i,source_file,date_ymd,date_h,tp_id,process_id,orig_str,new_str,mode,INTERID=self.find_file()
                if i==0:
                    meg='no file'
                    
                    return (-1,meg)
                else: 
                    mg=[]          
                    j=0            
                    if mode=='v': 
                        orig_str=re.escape(orig_str)            
                        #print orig_str     
                        v_orig = re.compile(orig_str)           
                        while j < i:
                            s_name = os.path.join(source_file[j][3],source_file[j][0])                                       
                            t_name = os.path.join(source_file[j][3],source_file[j][0])
                            t_name=t_name+"_replace"                                                                               
                            if os.path.exists(s_name):                        
                                if os.path.exists(t_name):
                                    os.remove(t_name)                     
                                    s_f=open(s_name,'rb') 
                                    t_f=open(t_name,'wb')                            
                                    
                                    for  line in  s_f.readlines():  
                                        n = v_orig.sub(new_str,line)
                                        t_f.write(n)
                                    cursor.callproc("common.Log_file_success",[process_id,INTERID,source_file[j][2],tp_id,source_file[j][1],0])
                                    s_f.close()
                                    t_f.close()
                                else:                           
                                    s_f=open(s_name,'rb')                              
                                    t_f=open(t_name,'wb')                                                            
                                       
                                    for  line in  s_f.readlines():  
                                        n = v_orig.sub(new_str,line)
                                        t_f.write(n)
                                    cursor.callproc("common.Log_file_success",[process_id,INTERID,source_file[j][2],tp_id,source_file[j][1],0])
                                    s_f.close()
                                    t_f.close()
                                    
                            else:
                                meg='%s not exists'%source_file[j][0]
                                mg.append(meg)
                                cursor.callproc("common.Log_file_fail",[process_id,INTERID,source_file[j][2],tp_id,source_file[j][1],meg,0,0])              
                       
                            j+=1
                    else:
                        mg=[]
                        orig_str=re.escape(orig_str)                                                                            
                        b=orig_str+'{1}'
                        c=b+'\W'  
                        #print "22222222222"
                        #print c                                      
                        f_orig = re.compile(c)
                        while j < i:
                            s_name = os.path.join(source_file[j][3],source_file[j][0])                                       
                            t_name = os.path.join(source_file[j][3],source_file[j][0])
                            t_name=t_name+"_replace"
                                                                                                           
                            if os.path.exists(s_name):                        
                                if os.path.exists(t_name):
                                    os.remove(t_name)
                                    s_f=open(s_name,'rb')                              
                                    t_f=open(t_name,'wb')                                
                                        
                                    for  line in  s_f.readlines():  
                                        n = f_orig.sub(new_str,line)
                                        t_f.write(n)
                                    cursor.callproc("common.Log_file_success",[process_id,INTERID,source_file[j][2],tp_id,source_file[j][1],0])
                                    s_f.close()
                                    t_f.close()
                                    
                                else:
                                    s_f=open(s_name,'rb')                              
                                    t_f=open(t_name,'wb')
                                        
                                    for  line in  s_f.readlines():                                 
                                        n= f_orig.sub(new_str,line)
                                        t_f.write(n)
                                    cursor.callproc("common.Log_file_success",[process_id,INTERID,source_file[j][2],tp_id,source_file[j][1],0])
                                    s_f.close()
                                    t_f.close()
                                    
                            else:
                                meg='%s not exists'%source_file[j][0]
                                mg.append(meg) 
                                cursor.callproc("common.Log_file_fail",[process_id,INTERID,source_file[j][2],tp_id,source_file[j][1],meg,0,0])
                
                            j+=1
                            
                    if len(mg) > 1:
                        print (-1,mg)       
                    else:
                        print (0,i)
                        
                    
                db.close() 
            except Exception as e:          
                return (-1,e)          
    
    if __name__ == '__main__':   
        a=replace()
        a.fun_replace()
    
  • 相关阅读:
    SQL注入常见处理方式
    git操作常用
    crontab 基本参数
    替代PHP格式化成无符号数后精度不对问题
    替代PHP两个大数相乘会有精度损失
    排序算法
    迁移服务器资源到新服务器
    数据库分库分表思路
    drupal 常用表单元素
    drupal模块开发
  • 原文地址:https://www.cnblogs.com/yuchunju/p/2661778.html
Copyright © 2011-2022 走看看