ph8x968jet 发表于 2016-6-8 12:21:54

python ftp操作脚本&常用函数

  

  需求:快速进行ftp上传 ,下载,查询文件

  原来直接在shell下操作:
  需要【连接,输用户名,输密码,单文件操作,存在超时限制】
  太过于繁琐,容易操作失败
  

  脚本改进:
  一句命令,搞定多文件上传,下载,查询,列表等操作
  后期可以加入更强大的功能
  

  直接上脚本:
  
#!/usr/bin/python#ftp.py#this script is used to make some ftp operations more convenient#add upload and download operations20111210 version0.1import sys,os,ftplib,socketCONST_HOST = "your ftp host or ip"CONST_USERNAME = "your username"CONST_PWD = "your password"CONST_BUFFER_SIZE = 8192COLOR_NONE = "\033try:ftp.storbinary('STOR %s'%file_name, f, CONST_BUFFER_SIZE)except ftplib.error_perm:return Falsereturn Truedef download(ftp, filename):f = open(filename,"wb").writetry:ftp.retrbinary("RETR %s"%filename, f, CONST_BUFFER_SIZE)except ftplib.error_perm:return Falsereturn Truedef list(ftp):ftp.dir()def find(ftp,filename):ftp_f_list = ftp.nlst()if filename in ftp_f_list:return Trueelse:return Falsedef help():print("help info:")print("[./ftp.py l]\t show the file list of the ftp site ")print("[./ftp.py f filenamA filenameB]\t check if the file is in the ftp site")print("[./ftp.py p filenameA filenameB]\t upload file into ftp site")print("[./ftp.py g filenameA filenameB]\t get file from ftp site")print("[./ftp.py h]\t show help info")print("other params are invalid")def main():args = sys.argvif len(args) == 0:print("Params needed!")sys.exit(0)ftp = connect()if args == "p":f_list = argsfor up_file in f_list:if not os.path.exists(up_file):print(("UPLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE+":file not exist")%up_file)continueelif not os.path.isfile(up_file):print(("UPLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE+":%s is not a file")%(up_file,up_file))continueif upload(ftp, up_file):print(("UPLOAD: %s "+COLOR_GREEN+"SUCCESS"+COLOR_NONE)%up_file)else:print(("UPLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE)%up_file)elif args == "g":f_list = argsfor down_file in f_list:if not find(ftp,down_file):print(("DOWNLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE+":%s is not in the ftp site")%(down_file,down_file))continueif download(ftp, down_file):print(("DOWNLOAD: %s "+COLOR_GREEN+"SUCCESS"+COLOR_NONE)%down_file)else:print(("DOWNLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE)%down_file)elif args == "l":list(ftp)elif args == "f":f_list = argsfor f_file in f_list:if find(ftp,f_file):print(("SEARCH: %s "+COLOR_GREEN+"EXIST"+COLOR_NONE)%f_file)else:print(("SEARCH: %s "+COLOR_RED+"NOT EXIST"+COLOR_NONE)%f_file)elif args == "h":help()else:print("args are invalid!")help()disconnect(ftp)if __name__ == "__main__":main()
  
  常用函数:
  用手册查看,以下只是简略,因为没用用到,[待整理]:
  login(user='',passwd='', acct='') 登录到FTP 服务器,所有的参数都是可选的
pwd()          当前工作目录
cwd(path)      把当前工作目录设置为path
dir(])显示path 目录里的内容,可选的参数cb 是一个回调函数,会被传给retrlines()方法
nlst() 与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) 创建远程目录

  

  

  

  

  
页: [1]
查看完整版本: python ftp操作脚本&常用函数