识别 FTP 中的新文件并将它们写入 AWS S3

Identify new files in FTP and write them to AWS S3

我目前正在 Python 中使用 ftplib 获取一些文件并将它们写入 S3。

我使用的方法是使用 with open 如下所示:

with open('file-name', 'wb') as fp:
        ftp.retrbinary('filename', fp.write)

从FTP服务器下载文件并保存在临时文件夹中,然后上传到S3。

我想知道这是否是最佳实践,因为这种方法的缺点是:

如果文件太多&太大,我可以下载它们并上传到S3,然后从临时文件夹中删除它们, 但问题是,如果我每天 运行 这个脚本一次,我必须再次下载所有内容,那么我如何检查文件是否已经下载并存在于 S3 中,以便脚本只处理新的-在 FTP?

中添加了文件

希望这是有道理的,如果有人能举个例子什么的就太好了,非常感谢。

您将处理给定文件路径的事实缓存到持久存储(例如,SQLite 数据库)。如果文件在您处理后可能会发生变化,您也可以通过缓存 FTP.dir() and/or 大小 FTP.size(filename) 的时间戳来检测到这一点。如果这不起作用,您还可以缓存文件的校验和(例如 SHA256),然后再次下载文件以重新计算校验和以查看文件是否已更改。 s3 可能支持条件上传 (etag),在这种情况下,您可以 calculate the etag 文件,然后使用 header 设置上传文件,最好使用 'Expect: 100-continue' header 来查看是否在您尝试上传数据之前它已经获取了文件。