我需要一些帮助才能创建一个脚本,每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()
答案 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,并在脚本的开头加载它。