標籤:compile pat 子目錄 path process env 多級 open 沒有
生產情況:tomcat下業務log備份,目錄分多級,然後對應目錄格式放到ftp上;所以,結構上 我就是一級一級目錄進行判斷(因為我沒有找到在ftp一次判斷其子目錄是否存在),還有一個low點就是我沒有找到怎樣一次性的調用ftp的login因為現在每次判斷都需要登入一下,最終功能是實現了;想著先貼出來
#!/usr/local/bin/python3.5###Description: 上傳業務log到FTP199###Author: Tonny.Deng###DateTime: 2016-11-22import os,sys,shutil,time,datetime,re,socket,subprocessimport ftplib##########################backup_dir = "/dockerlogs/"ip_addr = socket.gethostbyname(socket.gethostname())ports = sorted(os.listdir(backup_dir))yesterday = (datetime.datetime.now() - datetime.timedelta(days=1)).strftime("%Y-%m-%d")thirday = (datetime.datetime.now() - datetime.timedelta(days=2)).strftime("%Y-%m-%d")###############取log檔案pattern = re.compile(r‘‘ + thirday + ‘*.log$‘ )#pattern = re.compile(r‘‘ + thirday + ‘*.log‘ )###############取服務連接埠列表目錄for port in (ports): port_dir = backup_dir + port ftp_dir = ip_addr + "/" + port##############判斷ftp上是否有對應目錄,沒有則建立,此次判斷是兩個目錄 如:192.168.20.130/8000 這兩個目錄是否存在 ftp = ftplib.FTP("192.xxxxx") ftp.login("sxxxxxxxxxxxxxx","xxxxxxxxx,10) try: ftp.mkd(ip_addr) ftp.cwd(ip_addr) try: ftp.mkd(port) ftp.quit() except ftplib.error_perm: ftp.quit() except ftplib.error_perm: ftp.cwd(ip_addr) try: ftp.mkd(port) ftp.quit() except ftplib.error_perm: ftp.quit()##############取連接埠目錄下的service目錄 for services in sorted(os.listdir(port_dir)): services_dir = port_dir + "/" + services##############判斷services目錄是否存在,即第三級 如:192.168.20.130/8000/yunwei ftp = ftplib.FTP("192.xxxxxx") ftp.login("syxxxxxx","sxxxxxx",10) ftp.cwd(ftp_dir) try: ftp.mkd(services) except ftplib.error_perm: ftp.quit()#############遍曆service目錄中的符合的檔案 for file in sorted(os.listdir(services_dir)): match = pattern.search(file) if match:#############匹配到檔案後進行 檔案名稱 更換操作,方便上傳 ftpdir_service = ftp_dir + "/" + services#############登入到ftp上的對應目錄,準備上傳 ftp = ftplib.FTP("19xxxxxxxxxx") ftp.login("sxxxxx","syxxxxxxx",10) ftp.cwd(ftpdir_service) filename = services_dir + "/" + file#############上傳壓縮檔到ftp os.environ[‘filename‘] = str(filename) os.system(‘gzip $filename‘) filename_gz = filename + ".gz"#############唯讀模式開啟本地需要上傳的檔案 filename_put = open(filename_gz,‘rb‘) ftp.storbinary(‘STOR %s‘ % os.path.basename(filename_gz),filename_put) ftp.nlst()
Python下使用ftplib上傳檔案到ftp上