需求:快速进行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. import sys,os,ftplib,socket
  6. CONST_HOST = "your ftp host or ip"
  7. CONST_USERNAME = "your username"
  8. CONST_PWD = "your password"
  9. CONST_BUFFER_SIZE = 8192
  10. COLOR_NONE = "\033[m"
  11. COLOR_GREEN = "\033[01;32m"
  12. COLOR_RED = "\033[01;31m"
  13. COLOR_YELLOW = "\033[01;33m"
  14. def connect():
  15. try:
  16. ftp = ftplib.FTP(CONST_HOST)
  17. ftp.login(CONST_USERNAME,CONST_PWD)
  18. return ftp
  19. except socket.error,socket.gaierror:
  20. print("FTP is unavailable,please check the host,username and password!")
  21. sys.exit(0)
  22. def disconnect(ftp):
  23. ftp.quit()
  24. def upload(ftp, filepath):
  25. f = open(filepath, "rb")
  26. file_name = os.path.split(filepath)[-1]
  27. try:
  28. ftp.storbinary('STOR %s'%file_name, f, CONST_BUFFER_SIZE)
  29. except ftplib.error_perm:
  30. return False
  31. return True
  32. def download(ftp, filename):
  33. f = open(filename,"wb").write
  34. try:
  35. ftp.retrbinary("RETR %s"%filename, f, CONST_BUFFER_SIZE)
  36. except ftplib.error_perm:
  37. return False
  38. return True
  39. def list(ftp):
  40. ftp.dir()
  41. def find(ftp,filename):
  42. ftp_f_list = ftp.nlst()
  43. if filename in ftp_f_list:
  44. return True
  45. else:
  46. return False
  47. def help():
  48. print("help info:")
  49. print("[./ftp.py l]\t show the file list of the ftp site ")
  50. print("[./ftp.py f filenamA filenameB]\t check if the file is in the ftp site")
  51. print("[./ftp.py p filenameA filenameB]\t upload file into ftp site")
  52. print("[./ftp.py g filenameA filenameB]\t get file from ftp site")
  53. print("[./ftp.py h]\t show help info")
  54. print("other params are invalid")
  55. def main():
  56. args = sys.argv[1:]
  57. if len(args) == 0:
  58. print("Params needed!")
  59. sys.exit(0)
  60. ftp = connect()
  61. if args[0] == "p":
  62. f_list = args[1:]
  63. for up_file in f_list:
  64. if not os.path.exists(up_file):
  65. print(("UPLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE+"  :file not exist")%up_file)
  66. continue
  67. elif not os.path.isfile(up_file):
  68. print(("UPLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE+"  :%s is not a file")%(up_file,up_file))
  69. continue
  70. if upload(ftp, up_file):
  71. print(("UPLOAD: %s "+COLOR_GREEN+"SUCCESS"+COLOR_NONE)%up_file)
  72. else:
  73. print(("UPLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE)%up_file)
  74. elif args[0] == "g":
  75. f_list = args[1:]
  76. for down_file in f_list:
  77. if not find(ftp,down_file):
  78. print(("DOWNLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE+"  :%s is not in the ftp site")%(down_file,down_file))
  79. continue
  80. if download(ftp, down_file):
  81. print(("DOWNLOAD: %s "+COLOR_GREEN+"SUCCESS"+COLOR_NONE)%down_file)
  82. else:
  83. print(("DOWNLOAD: %s "+COLOR_RED+"FAILED"+COLOR_NONE)%down_file)
  84. elif args[0] == "l":
  85. list(ftp)
  86. elif args[0] == "f":
  87. f_list = args[1:]
  88. for f_file in f_list:
  89. if find(ftp,f_file):
  90. print(("SEARCH: %s "+COLOR_GREEN+"EXIST"+COLOR_NONE)%f_file)
  91. else:
  92. print(("SEARCH: %s "+COLOR_RED+"NOT EXIST"+COLOR_NONE)%f_file)
  93. elif args[0] == "h":
  94. help()
  95. else:
  96. print("args are invalid!")
  97. help()
  98. disconnect(ftp)
  99. if __name__ == "__main__":
  100. 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) 创建远程目录

python ftp操作脚本&常用函数的更多相关文章

  1. Python学习笔记之常用函数及说明

    Python学习笔记之常用函数及说明 俗话说"好记性不如烂笔头",老祖宗们几千年总结出来的东西还是有些道理的,所以,常用的东西也要记下来,不记不知道,一记吓一跳,乖乖,函数咋这么多 ...

  2. 1. python 字符串简介与常用函数

    1. python中的字符串简介与常用函数 在python中,字符串变成了一个强大的处理工具集,他是不可变的,也就是说字符串包含字符与字符的顺序,他不可以原处修改 字符串是我们后面需要学习的稍大一点的 ...

  3. python for循环及常用函数

    python for循环 格式: for iterating_var in sequence: statements(s) ###################################### ...

  4. PHP操作文件常用函数

    [获取文件信息的函数] basename($path[,扩展名]) 返回文件路径中去掉路径后的文件名称."/root/a.txt"输出a.txt;带上.txt输出a. dirnam ...

  5. Python文件或目录操作的常用函数

    ◆ os.listdir(path) Return a list containing the names of the entries in the directory given by path. ...

  6. NPOI操作Excel常用函数

    最近因项目接触了NPOI,感觉还是蛮不错的,网络上的教程普遍版本较老,本篇记录所常用操作,采用NPOI 2.0版本. 推荐: NPOI官方网站 NPOI 1.2.4/1.2.5 官方教程 新建Exce ...

  7. Python之Numpy库常用函数大全(含注释)

    前言:最近学习Python,才发现原来python里的各种库才是大头! 于是乎找了学习资料对Numpy库常用的函数进行总结,并带了注释.在这里分享给大家,对于库的学习,还是用到时候再查,没必要死记硬背 ...

  8. Python之Numpy库常用函数大全(含注释)(转)

    为收藏学习,特转载:https://blog.csdn.net/u011995719/article/details/71080987 前言:最近学习Python,才发现原来python里的各种库才是 ...

  9. c语言字符串操作,及常用函数

    一,字符串操作 1 . strcpy : 拷贝 char *stpcpy(char *destin, char *source); 2 . strcat :  拼接 char *strcat(char ...

随机推荐

  1. zzd 的割草机(Lawnmower)

    评测传送门 [题目描述] 已知花坛为一个 n * m 的矩形,草只会长在某些个格子上,zzd 有一个割草机,一开始,zzd 站在(1,1)处,面向(1,m)(面向右).每次 zzd 有两个选择(耗费一 ...

  2. Linux的基础优化

    归结成口诀: 一清.一精.一增.两优.四设.七其他 一清: 定时清理日志 一精: 精简开机启动服务 一增: 增大文件描述符 两优: linux内核参数的优化.yum源优化 四设:设置系统的字符集.设置 ...

  3. erp前端项目总结

    目录 一.项目目录(vue-cli2) 二.开发实践 (一) 权限 (二) 各组件间传递数据 (四) 路由 (七) 组织部门业务员三级联动 (八) 优化性能,手动绑定下拉框数据 (九) 验证 (十) ...

  4. html5 构造网页的新方式

    从 html 诞生至今,我们构建 html 页面的使用 html 元素好像并没有太多的进步.在构建 html 页面中,用的最多的是 div 标签.但是应用 div 标签构建 html 页面有一个问题, ...

  5. Fetch API 了解 及对比ajax、axois

    Fetch是什么 Fetch 是一个现代的概念, 等同于 XMLHttpRequest.它提供了许多与XMLHttpRequest相同的功能,但被设计成更具可扩展性和高效性.Fetch被很多浏览器所支 ...

  6. 【方法】jQuery无插件实现 鼠标拖动切换图片/内容 功能

    前言 我就想随便叨逼叨几句,爱看就看几句,不爱看就直接跳过看正文就好啦~ 这个方法是仿写页面时我自己研究出来,可能有比我更简单的方法. 但我不管,因为我没查我不知道,我就觉得我的最好啦,耶耶耶~ 效果 ...

  7. [Openwrt 扩展上篇]USB挂载&U盘启动&Samba共享

    最近偷懒,没学习,反想起自己的路由刷了Openwrt,正好闲置了一个硬盘想拿来做个网络硬盘,于是开始了折腾....这里将不谈论如何刷Openwrt,如何ssh,如何添加PPOE,如何添加相对应服务的包 ...

  8. 动态获取UILabel的bounds

    在使用UILabel存放字符串时,经常需要获取label的长宽数据,本文列出了部分常用的计算方法. 1.获取宽度,获取字符串不折行单行显示时所需要的长度 CGSize labelBounds = [s ...

  9. Unity 3(一):简介与示例

    本文关注以下方面(环境为VS2012..Net Framework 4.5以及Unity 3): Ioc/DI简介: Unity简单示例 一.Ioc/DI简介 IoC 即 Inversion of C ...

  10. DenseNet笔记

    一.DenseNet的优点 减轻梯度消失问题 加强特征的传递 充分利用特征 减少了参数量 二.网络结构公式 对于每一个DenseBlock中的每一个层, [x0,x1,…,xl-1]表示将0到l-1层 ...