使用python-ftp协议上传数据到远程服务器

# -*- coding: utf-8 -*-
'''
Created on 2015年9月1日
此程序在民生路dpismzapp主机上运行
把migration数据上传到奕行ftp服务器(给学军使用)
@author: Mr.ZHOU
'''
import time
import os
import traceback
from ftplib import FTP

localfilelist='/home/yixin/yxdata/ftp/update_migration.txt'
localdir='/home/yixin/yxdata/migration_stat/'
remotedir='/qujian_stat/'
print('The FTPupload migration programe is running...')

def getftpconnect():  
    ftp_server = '116.236.134.122'  
    username = 'admin'  
    password = '123.com'  
    ftp=FTP()  
    ftp.set_debuglevel(2) #打开调试级别2,显示详细信息  
    ftp.connect(ftp_server,21) #连接  
    ftp.login(username,password) #登录,如果匿名登录则用空串代替即可  
    return ftp  
            
def ftp_upload(ftp,remotefile,localfile):
    try:
        bufsize = 1024  
        fp = open(localfile,'rb')  
        ftp.storbinary('STOR '+ remotefile,fp,bufsize) #上传文件  
        ftp.set_debuglevel(0)  
        fp.close() #关闭文件  
        
    except Exception as e:
        traceback.print_exc()
            
if __name__ == '__main__':
    
    if os.path.exists(localfilelist):   
        print("已找到历史记录文件,程序将忽略在已下载列表的文件,注意定期清理历史记录文件哦,否则会很大!")
    else:
        print("未找到已下载历史记录文件,稍后程序会自动创建新的记录文件!")   
                  
    while True:
        if os.path.exists(localfilelist):
            with open(localfilelist,'r') as file1:
                filelist=file1.readlines()#读取本地已有的文件列表
                filelist=map(str.strip,filelist)#过滤每一行的\n
                localfileset=set(filelist)
        else:
            localfileset=set()  
        #建立传输通道           
        try:
            ftptransport=getftpconnect()
            remote_localfiles=os.listdir(localdir)#这个程序中比较的文件列表就在本地
            remote_localfileset=set(remote_localfiles)
            #求差集,获得新文件列表
            newfiles=remote_localfileset-localfileset
            newfileslist=list(newfiles)
            newfileslist.sort()#按顺序上传
            time.sleep(10)#10s执行一次,顺便等待文件写完
            
            with open(localfilelist,'a') as locallist:
                for item in newfileslist:
                    file_to_send=localdir+str(item)
                    remotefile=remotedir+str(item)
                    ftp_upload(ftptransport,remotefile,file_to_send)
                    locallist.write(str(item)+"\n")#把已经上传的文件追加到已下载记录中去
                
            ftptransport.quit()
        except Exception as e:
            traceback.print_exc()
            try:
                ftptransport.close()
            except:
                    pass
                
        
    
    
    
    
    
    
    
    
    

你可能感兴趣的:(使用python-ftp协议上传数据到远程服务器)