我目前在 Python 中使用 ftplib
来获取一些文件并将它们写入 S3。
我使用的方法是使用 with open
,如下所示:
with open('file-name', 'wb') as fp:
ftp.retrbinary('filename', fp.write)
从FTP服务器下载文件并保存在一个临时文件夹中,然后将它们上传到S3。
我想知道这是否是最佳实践,因为这种方法的缺点是:
如果文件太多&大,我可以下载它们并上传到S3,然后从临时文件夹中删除它们, 但问题是如果我每天运行一次这个脚本,我必须再次下载所有内容,那么我如何检查文件是否已经下载并存在于 S3 中,以便脚本只会处理 FTP 中新增的文件?
希望这是有道理的,如果有人有例子或其他东西会很棒,非常感谢。
答案 0 :(得分:2)
您将处理给定文件路径到持久存储(例如 SQLite 数据库)的事实缓存起来。如果文件在您处理后可能发生更改,您也可以通过缓存 FTP.dir()
和/或大小 FTP.size(filename)
的时间戳来检测到这一点。如果这不起作用,您还可以缓存文件的校验和(例如 SHA256),然后再次下载文件以重新计算校验和以查看文件是否已更改。 s3 可能支持条件上传 (etag),在这种情况下,您将 calculate the etag 文件,然后使用该标头集上传它,理想情况下使用“Expect: 100-continue”标头,以查看它之前是否已经获得了该文件您尝试上传数据。