我有一个脚本可以按设定的时间间隔从 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'