#!/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兩個平臺(至於其他平臺沒有測試))