码迷,mamicode.com
首页 > 编程语言 > 详细

用Python写一个ftp下载脚本

时间:2015-08-06 11:22:02      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

Python写一个ftp下载脚本

----基于Red Hat Enterprise Linux Server release 6.4 (Santiago);python 2.6.6

Ps:少侠我接触Python半个月以来接到的第一个需求,虽然如此简单的一个脚本,少侠我磕磕绊绊却用了将近一天半的时间才写出来,但还是很开心,毕竟也粗来了,废话不多说,切入正题。因为一开始没有用过ftplib模块,所以各种谷歌度娘一堆资料杂乱不堪,话不清,理不乱的,本文实现的功能简单,下面介绍一下,以免误导读者。

需求:师傅给了一个需求,写一个ftp自动下载的脚本。似乎下载文件没什么难的,用ftp下载文件似乎更简单,getmget完事。但是需求是,服务器上主要是dat文件在备份,当备份完成后,会生成一个同名字的ack文件,要把备份完成的dat文件下载到本地,然后删除云端服务器的ackdat文件。虽然听着这个需求挺找抽,也挺容易实现的,但谁叫我是菜鸟呢,当时就蒙圈了。

  ftp地址192.168.213.129

用户名dmp    

密码zcxc123!

文件位置/var/ftp/pub/pizi

我看了下大概3分钟生成一个文件,文件忙时可能要60M以上,网管网估计悬,师父让我先写脚本,回头联系拉内网走。吐槽完毕,开始上干货:

----------------------------------------------分隔线---------------------------------------------

下面正式切入正题:

1.       首先要引入ftplib模块,Python中默认安装的ftplib模块定义了FTP类,其中函数有限,可用来实现简单的ftp客户端,用于上传或下载文件。网上有很多远程登录的实例,下面写一种最适合菜鸟的写法

2.       基本的代码如下:

from ftplib import FTP

###引入ftp模块

import re

###引入re模块使Python拥有全部的正则表达式的功能

ftp = FTP(‘目的主机的ip地址’)

####连接ftp服务器

ftp.login(‘user’,’passwd’)

###登录ftp服务器

ftp.cwd(‘ftp存放文件的路径’)

###设置一个你要登录的目录,下载上传文件都在此目录

ftp.nlst()

###获取目录下的文件

file_handle=open(filename,"wb").write

###以写模式在本地打开文件

ftp.retrbinary("RETR filename.txt",file_handel,bufsize)

###下载ftp文件

ftp.deletefilename

###删除ftp服务器上的文件

3.       下面粘上我的代码

#!/usr/bin/python

#coding=utf-8

import re

from ftplib import FTP

ftp = FTP(‘192.168.213.129‘)

ftp.login(‘root‘,‘westos‘)

print ‘welcome‘

print ftp.getwelcome()

ftp.cwd(‘/var/ftp/pub/pizi‘)

bufsize=1024    #设置缓冲块大小

list = ftp.nlst()   #获得一个当前目录文件的的列表

for name in list:         #用一个for循环取列表中的元素

        print (name)

        match = re.match(r‘(.*)\.ack$‘,name)      #匹配去除的元素,用正则

        if match:       

                a = match.group(1)   #如果匹配成功,取出.ack前面的文件名

                if (a + ".dat"):   #然后在查看是否有同名字的.dat文件

                   ftp.retrbinary("RETR %s"%a+".dat",open(a+".dat",‘wb‘).write)

                                                      #如果两文件都存在,下载.dat文件

                      ftp.delete(name)

                                                         #删除匹配上的.ack文件

                      ftp.delete(a + ".dat")

                                                         #删除匹配上的.dat文件

       else:

                continue

ftp.quit()

print "ftp down ok"

4.       登录ftp服务器的方法有很多,并且匹配在此可以不用正则,用spilt分割可能更简单,方法有很多,能实现就行。

 

                                                                                             新浪微博

                                                                                        @皮子喜欢打篮球


用Python写一个ftp下载脚本

标签:

原文地址:http://my.oschina.net/pppi/blog/488519

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!