文件替换

#!/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()

 

posted @ 2012-08-29 11:38  菜鸟MM  阅读(239)  评论(0编辑  收藏  举报