用Python寫一個ftp下載指令碼

來源:互聯網
上載者:User

標籤:

Python 寫一個 ftp 下載指令碼

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

Ps:少俠我接觸Python半個月以來接到的第一個需求,雖然如此簡單的一個指令碼,少俠我磕磕絆絆卻用了將近一天半的時間才寫出來,但還是很開心,畢竟也粗來了,廢話不多說,切入正題。因為一開始沒有用過ftplib模組,所以各種Google度娘一堆資料雜亂不堪,話不清,理不亂的,本文實現的功能簡單,下面介紹一下,以免誤導讀者。

需求:師傅給了一個需求,寫一個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擁有全部的Regex的功能

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.       下面粘上My Code

#!/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下載指令碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.