【问题标题】:Identify new files in FTP and write them to AWS S3识别 FTP 中的新文件并将它们写入 AWS S3
【发布时间】:2021-02-24 10:14:42
【问题描述】:

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

我使用的方法是使用with open,如下图:

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

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

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

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

希望这是有道理的,如果有人有例子或其他东西,那就太好了,非常感谢。

【问题讨论】:

  • 我不认为你的问题标题总结了你的问题。 “从 FTP 获取文件并将它们写入 AWS S3” 没有问题。你似乎已经解决了。您在查找 FTP 上的新文件时遇到问题。
  • 无论如何,这可能会对您有所帮助:How to get FTP file's modify time using Python ftplib.

标签: python amazon-web-services amazon-s3 ftp ftplib


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 2021-10-13
  • 2020-04-07
  • 2021-05-05
  • 2021-12-29
  • 2023-03-23
  • 1970-01-01
相关资源
最近更新 更多