2015-10-14 113 views
-3

我需要一些幫助才能創建腳本以每24小時從FTP下載多個.csv文件,忽略舊文件並繼續下載新文件保持更新。我在寫入模式時遇到了問題,因爲文件名稱從01150728.csv,01150904.csv到02xxxxxx.csv,03xxxxx.csv不等,目前達到了30151007.csv。 我目前使用的腳本會下載所有文件,但我需要一個命令行才能執行前面描述的操作。Python腳本從FTP下載特定文件並更新下載目錄

from ftplib import FTP 
import sys 
import ftplib 
import os 
import fnmatch 
os.chdir(r'______________') # Directory where the files need to be downloaded 
ftp=ftplib.FTP('xxxxxxxx', 'xxxxx', 'xxxxxx') # ftp host info 
ftp.cwd('______') 
filematch='*csv' 
for filename in ftp.nlst(filematch): 
    fhandle=open(filename, 'wb') 
    print 'Getting ' + filename 
    ftp.retrbinary('RETR '+ filename, fhandle.write) 
    fhandle.close() 


ftp.quit() 

回答

2

您應該保留已獲取文件的列表或一組文件。以下假定您運行一次代碼並不會退出。

from ftplib import FTP 
import sys 
import ftplib 
import os 
import fnmatch 
os.chdir(r'______________') # Directory where the files need to be downloaded 
ftp=ftplib.FTP('xxxxxxxx', 'xxxxx', 'xxxxxx') # ftp host info 
ftp.cwd('______') 
filematch='*csv' 
import time 

downloaded = [] 

while True: # runs forever 
    skipped = 0 

    for filename in ftp.nlst(filematch): 
     if filename not in downloaded: 
      fhandle=open(filename, 'wb') 
      print 'Getting ' + filename 
      ftp.retrbinary('RETR '+ filename, fhandle.write) 
      fhandle.close() 
      downloaded.append(filename) 
     else: 
      skipped += 1 

    print 'Downloaded %s, skipped %d files' % (downloaded[-1], skipped) 
    time.sleep(24*60*60) # sleep 24 hours after finishing last download 

ftp.quit() 

如果你運行該腳本的每一天,省略了while循環和使用鹹菜或乾脆寫列表/文件中的設置,並且在腳本的開始加載它。

+0

謝謝,它改進了腳本,但是當我運行它時,不是下載最新的文件,而是僅從兩個月前最後修改的FTP下載相同的.csv文件,即使我已經有該文件該目錄。 – Ediwnward

+0

我的錯誤,代碼已更正。 – jake77

+0

這是我希望我可以不止一次地upvote的解決方案類型。從ftp服務器下載csv的過程變得比我預想的要大得多。有趣的是,在某一天,您可以閱讀30個任務的實現,而不是找到您正在尋找的解決方案。然後第二天,所需要的是第二個鏈接找到完全符合您需求的解決方案。謝謝! – myidealab