使用python遍歷上傳本地的所有文件,包含子目錄的文件

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
import glob
from ftplib import FTP
import re

Server_ip = "2.2.2.128"
Server_path = "/opt/test"
Client_path = "C:\Users\Administrator\Desktop\FTP-test"
ftp = FTP()
ftp.connect(Server_ip,21)
ftp.login("root","123456")

Local_dir_l = []
if re.search(r".*"+os.sep+"$",Client_path):
    pass
else:
    Client_path = Client_path+os.sep

#判斷本地路徑是否存在
if os.path.exists(Client_path):
    pass
else:
    print Client_path,"不存在,將退出"
    exit(1)


#遍歷獲取本地目錄
def Ftp_local_dir(dir_path):
    lsdir = os.listdir(dir_path)
    dirs = [i for i in lsdir if os.path.isdir(os.path.join(dir_path, i))] #這一段是列出所有目錄(包括子目錄下的目錄)
    if dirs:
        for i in dirs:
            Ftp_local_dir(os.path.join(dir_path, i))
    files = [i for i in lsdir if os.path.isfile(os.path.join(dir_path,i))] #這一段是列出所有文件(包括子目錄下的文件)
    for f in dirs:
        sss = (os.path.join(dir_path,f))
        Local_dir_l.insert(0,sss)


#FTP上傳
def get_file():
    try:
        try:
            ftp.cwd(Server_path)#切換到此FTP路徑
        except:
            print "FTP 服務器不存路徑",Server_path,"將創建"
            ftp.mkd(Server_path)
        Local_file_list_new = []
        Local_file_list = os.listdir(Client_path)
        for Local_file in Local_file_list:
            if os.path.isdir(Client_path+Local_file):
                pass
            else:
                Local_file_list_new.append(Local_file)
        os.chdir(Client_path)
        #print "所在目錄",Client_path
        #print "FTP目錄爲當前目錄"
        #print Local_file_list_new
        for file_name in Local_file_list_new:
            ftp.storbinary('STOR ' +file_name,open(file_name,'rb'),1024)
            print "上傳本地文件: "+Client_path+file_name+" 到FTP的: "+Server_path+"/"+file_name
        #print "="*100
####################################
        for Local_dir_s_1 in Local_dir_l:
            ftp.cwd(Server_path)#切換到此FTP路徑
            Local_file_list_1_new = []
            Local_file_list_1 = os.listdir(Local_dir_s_1)
            for Local_file_1 in Local_file_list_1:
                if os.path.isdir(Local_dir_s_1+os.sep+Local_file_1):
                    #Local_file_list_1.remove(Local_file_1)
                    pass
                else:
                    Local_file_list_1_new.append(Local_file_1)
            #print "所在目錄",Local_dir_s_1
            #print "FTP目錄爲",(Local_dir_s_1.split(Client_path))[-1]
            os.chdir(Local_dir_s_1) #切換本地目錄路徑
            try:
                ftp.mkd(((Local_dir_s_1.split(Client_path))[-1]).replace(os.sep,"/")) #在ftp上面創建對應的目錄
            except:
                pass
                #print "FTP服務器已存在目錄",(Local_dir_s_1.split(Client_path))[-1]
            ftp.cwd(((Local_dir_s_1.split(Client_path))[-1]).replace(os.sep,"/")) 
            #print Local_file_list_1_new
            for file_name in Local_file_list_1_new:
                ftp.storbinary('STOR ' +file_name,open(file_name,'rb'),1024)
                print "上傳本地文件: "+Local_dir_s_1+os.sep+file_name+" 到FTP的: "+Server_path+"/"+((Local_dir_s_1.split(Client_path))[-1])+"/"+file_name
            #print "="*100

        ftp.close() #退出連接
        print ("文件上傳完成")
    except Exception as e:
        print ("文件上傳失敗...")
        print (str(e))

#遍歷獲取本地目錄
Ftp_local_dir(Client_path)

get_file()

 

此腳本親測有效(適用於python2.x版本與python3.x版本,也適用於windows於linux兩個平臺(至於其他平臺沒有測試))

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章