用于从FTP下载特定文件并更新下载目录的Python脚本

时间:2015-10-14 08:26:05

标签: python

我需要一些帮助才能创建一个脚本,每24小时从FTP下载多个.csv文件,忽略旧文件并继续下载新文件以保持更新。我在编写模式时遇到问题,因为文件名从01150728.csv,01150904.csv到02xxxxxx.csv,03xxxxx.csv不等,目前达到30151007.csv。 我目前使用的脚本下载了所有文件,但我需要一个命令行才能完成我之前描述的操作。

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()

1 个答案:

答案 0 :(得分: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循环并使用pickle或只是在文件中写入list / set,并在脚本的开头加载它。