我有一个脚本,可以按设定的时间间隔从FTP目录中提取文件。但是,由于文件只是被复制而不是移动,因此最终会反复拉出相同的文件。什么是确保我只提取新文件的最佳方法?我正在考虑使用本地目录中的文件交叉引用FTP站点上的文件,但不太确定如何执行此操作。另外,我如何不仅检查文件名,还修改日期?例如:random_file.txt最初于2012年10月25日下午2:15放置在FTP站点上,并在5分钟后下载。然后,在2012年10月26日上午11点40分,在FTP站点上替换了random_file.txt并使用了更新版本。我可以从FTP站点下载和/或覆盖本地目录中的文件只有较新的文件吗?谢谢!
这是我现有的代码:
import ftplib, os
def fetch():
server = 'ftp.example.com'
username = 'foo'
password = 'bar'
directory = '/random_directory/'
filematch = '*.txt'
ftp = ftplib.FTP(server)
ftp.login(username, password)
ftp.cwd(directory)
for filename in ftp.nlst(filematch):
fhandle = open(os.path.join('C:my_directory', filename), 'wb')
print 'Getting ' + filename
ftp.retrbinary('RETR ' + filename, fhandle.write)
fhandle.close()
更新:所以我使用了Siddharth Toshniwal的链接来解决这个问题,至少部分是这样。对于那些可能偶然发现并需要它的人来说,这是我迄今为止的新代码。请注意,这只检查文件是否存在,而不是它的修改日期:
for filename in ftp.nlst(filematch):
if os.path.exists('C:\my_directory\\' + filename) == False:
fhandle = open(os.path.join('C:\my_directory', filename), 'wb')
print 'Getting ' + filename
ftp.retrbinary('RETR ' + filename, fhandle.write)
fhandle.close()
elif os.path.exists(('C:\my_directory\\' + filename)) == True:
print 'File ', filename, ' Already Exists, Skipping Download'
答案 0 :(得分:2)
我认为使用类似rsync的东西而不是在python中使用某些东西。
但无论出于何种原因,如果不可行,以下链接可以帮助您: http://code.activestate.com/recipes/327141-simple-ftp-directory-synch/ http://alexharvey.eu/code/python/get-a-files-last-modified-datetime-using-python/