歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Python ftp操作腳本&常用函數

需求:快速進行ftp上傳 ,下載,查詢文件

原來直接在shell下操作:

需要【連接,輸用戶名,輸密碼,單文件操作,存在超時限制】

太過於繁瑣,容易操作失敗

腳本改進:

一句命令,搞定多文件上傳,下載,查詢,列表等操作

後期可以加入更強大的功能

直接上腳本:

 

  1. #!/usr/bin/python   
  2. #ftp.py   
  3. #this script is used to make some ftp operations more convenient   
  4. #add upload and download operations  20111210 version0.1   
  5.   
  6. import sys,os,ftplib,socket  
  7.   
  8. CONST_HOST = "your ftp host or ip"  
  9. CONST_USERNAME = "your username"  
  10. CONST_PWD = "your password"  
  11. CONST_BUFFER_SIZE = 8192  
  12.   
  13. COLOR_NONE = "\033[m"  
  14. COLOR_GREEN = "\033[01;32m"  
  15. COLOR_RED = "\033[01;31m"  
  16. COLOR_YELLOW = "\033[01;33m"  
  17.   
  18. def connect():  
  19.   try:  
  20.     ftp = ftplib.FTP(CONST_HOST)  
  21.     ftp.login(CONST_USERNAME,CONST_PWD)  
  22.     return ftp  
  23.   except socket.error,socket.gaierror:  
  24.     print("FTP is unavailable,please check the host,username and password!")  
  25.     sys.exit(0)  
  26.   
  27. def disconnect(ftp):  
  28.   ftp.quit()  
  29.   
  30. def upload(ftp, filepath):  
  31.   f = open(filepath, "rb")  
  32.   file_name = os.path.split(filepath)[-1]  
  33.   try:  
  34.     ftp.storbinary('STOR %s'%file_name, f, CONST_BUFFER_SIZE)  
  35.   except ftplib.error_perm:  
  36.     return False  
  37.   return True  
  38.   
  39. def download(ftp, filename):  
  40.   f = open(filename,"wb").write  
  41.   try:  
  42.     ftp.retrbinary("RETR %s"%filename, f, CONST_BUFFER_SIZE)  
  43.   except ftplib.error_perm:  
  44.     return False  
  45.   return True  
  46.   
  47. def list(ftp):  
  48.   ftp.dir()  
  49.   
  50. def find(ftp,filename):  
  51.   ftp_f_list = ftp.nlst()  
  52.   if filename in ftp_f_list:  
  53.     return True  
  54.   else:  
  55.     return False  
  56.   
  57. def help():  
  58.   print("help info:")  
  59.   print("[./ftp.py l]\t show the file list of the ftp site ")  
  60.   print("[./ftp.py f filenamA filenameB]\t check if the file is in the ftp site")  
  61.   print("[./ftp.py p filenameA filenameB]\t upload file into ftp site")  
  62.   print("[./ftp.py g filenameA filenameB]\t get file from ftp site")  
  63.   print("[./ftp.py h]\t show help info")  
  64.   print("other params are invalid")  
  65.   
  66.   
  67. def main():  
  68.   args = sys.argv[1:]  
  69.   if len(args) == 0:  
  70.     print("Params needed!")  
  71.     sys.exit(0)  
  72.   
  73.   ftp = connect()  
  74.   
  75.   if args[0] == "p":  
  76.     f_list = args[1:]  
  77.     for up_file in f_list:  
  78.       if not os.path.exists(up_file):  
  79.         print(("UPLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE+"  :file not exist")%up_file)  
  80.         continue  
  81.       elif not os.path.isfile(up_file):  
  82.         print(("UPLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE+"  :%s is not a file")%(up_file,up_file))  
  83.         continue  
  84.   
  85.       if upload(ftp, up_file):  
  86.         print(("UPLOAD: %s "+COLOR_GREEN+"SUCCESS"+COLOR_NONE)%up_file)  
  87.       else:  
  88.         print(("UPLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE)%up_file)  
  89.   elif args[0] == "g":  
  90.     f_list = args[1:]  
  91.     for down_file in f_list:  
  92.       if not find(ftp,down_file):  
  93.         print(("DOWNLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE+"  :%s is not in the ftp site")%(down_file,down_file))  
  94.         continue  
  95.   
  96.       if download(ftp, down_file):  
  97.         print(("DOWNLOAD: %s "+COLOR_GREEN+"SUCCESS"+COLOR_NONE)%down_file)  
  98.       else:  
  99.         print(("DOWNLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE)%down_file)  
  100.   
  101.   elif args[0] == "l":  
  102.     list(ftp)  
  103.   elif args[0] == "f":  
  104.     f_list = args[1:]  
  105.     for f_file in f_list:  
  106.       if find(ftp,f_file):  
  107.         print(("SEARCH: %s "+COLOR_GREEN+"EXIST"+COLOR_NONE)%f_file)  
  108.       else:  
  109.         print(("SEARCH: %s "+COLOR_RED+"NOT EXIST"+COLOR_NONE)%f_file)  
  110.   
  111.   elif args[0] == "h":  
  112.     help()  
  113.   else:  
  114.     print("args are invalid!")  
  115.     help()  
  116.   
  117.   disconnect(ftp)  
  118.   
  119.   
  120.   
  121. if __name__ == "__main__":  
  122.   main()  

常用函數:

用手冊查看,以下只是簡略,因為沒用用到,[待整理]:

login(user='',passwd='', acct='') 登錄到FTP 服務器,所有的參數都是可選的
pwd()                    當前工作目錄
cwd(path)                把當前工作目錄設置為path
dir([path[,...[,cb]])    顯示path 目錄裡的內容,可選的參數cb 是一個回調函數,會被傳給retrlines()方法
nlst([path[,...]) 與dir()類似,但返回一個文件名的列表,而不是顯示這些文件名
retrlines(cmd [, cb]) 給定FTP 命令(如“RETR filename”),用於下載文本文件。可選的回調函數cb 用於處理文件的每一行
retrbinary(cmd, cb[,bs=8192[, ra]]) 與retrlines()類似,只是這個指令處理二進制文件。回調函數cb 用於處理每一塊(塊大小默認為8K)下載的數據。
storlines(cmd, f) 給定FTP 命令(如“STOR filename”),以上傳文本文件。要給定一個文件對象f
storbinary(cmd, f[,bs=8192]) 與storlines()類似,只是這個指令處理二進制文件。要給定一個文件對象f,上傳塊大小bs 默認為8Kbs=8192])
rename(old, new) 把遠程文件old 改名為new
delete(path) 刪除位於path 的遠程文件
mkd(directory) 創建遠程目錄

Copyright © Linux教程網 All Rights Reserved