识别 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 来查看是否在您尝试上传数据之前它已经获取了文件。
我目前正在 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 来查看是否在您尝试上传数据之前它已经获取了文件。