文件移动
#!/usr/bin/python #Filename :smelter_move.py # -*- coding:utf-8 -*- import cx_Oracle import os import datetime import os.path import shutil import sys import getopt,string class Filemove_module(object): def __init__(self,user_name,user_password,dns): self.user_name=user_name self.user_password=user_password self.dns=dns def conn_db(self): db=cx_Oracle.connect(self.user_name,self.user_password,self.dns) return db def c_process_id(self,pid): db=cx_Oracle.connect(self.user_name,self.user_password,self.dns) 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_move.py [options] Options: -h, --help show this help message and exit -i, --interid assign to interface id -d, --dayid assign to file date -n, --process assign to process id -s, --sourcedir assign to source directory -p, --targetdir assign to target directory Example: smelter_move.py -i 30 -d 20110502 -n 0 -s /tmp/test0604 -p /hadoop/pigtmp/sj0109/sj ''' def find_file(self,table_id,data_date,process_id,current_directory): db=self.conn_db() cursor=db.cursor() cursor.execute("select type_id from dm_type where type_code=\'FILE_MOVE\'") b=cursor.fetchall() #print b[0][0] tp_id = b[0][0] if len(data_date)==8: data_ymd=data_date data_h='000000' elif len(data_date)==14: data_ymd=data_date[0:8] data_h=data_date[8:14] cursor.execute('select t1.if_file_name,t1.file_type,t1.file_id from log_file t1 join dm_type t2 on t1.type_id=t2.type_id where t1.table_id=:tid and t1.data_date=:dt_dt and t1.current_directory=:crt and t2.type_code<>\'FILE_COPY\' and t2.type_code<>\'FILE_MOVE\' and t2.type_code<>\'FILE_DELETE\' and t1.status=\'S\'',tid=table_id,dt_dt=data_ymd,crt=current_directory ) 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,table_id,source_file[i][2],tp_id,source_file[i][1]]) cursor.callproc("common.Log_file_start",[process_id,table_id,source_file[i][2],tp_id,source_file[i][1],data_ymd,data_h,source_file[i][0],current_directory]) i+=1 return i,source_file,data_ymd,data_h,tp_id else: return i,0,0,0,0 db.close() def fun_move(self,table_id,data_date,process_id,current_directory,target_directory): try: db=self.conn_db() cursor=db.cursor() p_process_id=self.c_process_id(process_id) i,source_file,data_ymd,data_h,tp_id = self.find_file(table_id,data_date,p_process_id,current_directory) if i==0: meg='no file' return -1,meg else: j=0 while j < i: filename = os.path.join(current_directory,source_file[j][0]) targetname = os.path.join(target_directory,source_file[j][0]) #print filename #print targetname if os.path.exists(filename): if not os.path.exists(targetname): shutil.move(filename,target_directory) cursor.callproc("common.Log_file_success",[p_process_id,table_id,source_file[j][2],tp_id,source_file[j][1],0]) else: meg='%s already exists'%targetname cursor.callproc("common.Log_file_fail",[p_process_id,table_id,source_file[j][2],tp_id,source_file[j][1],meg,0,0]) break else: meg='%s not exists'%filename cursor.callproc("common.Log_file_fail",[p_process_id,table_id,source_file[j][2],tp_id,source_file[j][1],meg,0,0]) break j+=1 cursor.execute('select count(*) from log_file t1,dm_type t2 where t1.table_id=:tid and t1.data_date=:dt_dt and t1.current_directory=:crt and t1.process_id=:p_process_id and t1.status=\'F\' and t1.type_id=t2.type_id',tid=table_id,dt_dt=data_ymd,crt=current_directory,p_process_id=p_process_id) a=cursor.fetchall() if a[0][0]==0: return 0,j else: return -1,meg db.close() except Exception as e: return -1,e def main(self): INTERID=0 DAYID=0 PROCESS=5 SOURCEDIR=0 TARGETDIR=0 try: if len(sys.argv) > 1: opts, args = getopt.getopt(sys.argv[1:], "i:d:n:s:p:h", ["interid=","dayid=","process=","sourcedir=","targetdir","help"]) for a,o in opts: if a in ('-i', '--interid'): INTERID=o #print o elif a in ('-d','--dayid'): #print o DAYID=o elif a in ('-n','--work'): PROCESS=o #print o elif a in ('-s', '--sourcedir'): SOURCEDIR=o #print o elif a in ('-p', '--targetdir'): TARGETDIR=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() #print INTERID,DAYID,PROCESS,SOURCEDIR,TARGETDIR f_move=self.fun_move(INTERID,DAYID,PROCESS,SOURCEDIR,TARGETDIR) print f_move except Exception as e: return 'input parameter error!',e if __name__ == '__main__': job_set=Filemove_module('','','') job_set.main()