【问题标题】:Is It possible to edit a file through FTP in Python?是否可以在 Python 中通过 FTP 编辑文件?
【发布时间】:2019-12-06 23:45:13
【问题描述】:

我正在开发一个 Python 机器人,其中代码由 Heroku 托管。 我添加的一项功能允许用户注册玩家代号,并将其与他们的 Discord 用户名相关联,并保存到 CSV 文件中。很简单。然而,事情让我很困惑,因为在 Heroku 上运行后我无法访问更新的文件。因此,一旦此 CSV 更新,我无法以任何方式访问它,并且一旦代码停止运行或出现中断,它会重新运行我上传的原始文件中的所有内容,从而丢失存储在 CSV 中的所有信息。

我现在想尝试通过 FTP 将这些值存储在我的网站上。我环顾四周,找不到这样做的方法。 我知道如何使用 Python 访问和上传,但我想直接编辑它们。

这可能吗?

【问题讨论】:

  • FTP 本身不允许文件编辑。您必须将文件复制到本地计算机,在那里对其进行编辑,然后再将其复制回来——同时希望在您复制文件和复制回远程计算机上的文件之间没有其他任何更改。他们发明了一种叫做“数据库”的东西——奇妙的小工具;他们会处理这样的一致性问题。
  • 一些 IDE 可以在 FTP 上编辑文件,但他们只需下载文件,在本地编辑并发送回来。据我所知,FTP 可能无法访问服务器上的任何编辑器,因此您无法直接在服务器上对其进行编辑。使用 SSH,您可以访问服务器上的编辑器,即。 vim、emacs、nano 和用于自动编辑的命令 - 即 sed、grep、awk - 也适用于安装在服务器上的 Python,因此您甚至可以运行 Python 代码来自动更改文件服务器。
  • 也许你应该更改代码,它应该在开始检查 csv 是否存在并将其复制到新名称(即名称中的当前日期)以保留它。
  • 那么,是否有可能在发出请求时读取 CSV 并将数据存储在缓冲区中,添加/更新数据,然后覆盖文件?我需要在不将数据保存到本地文件的情况下完成所有这些操作。
  • 什么要求?我不明白你什么时候尝试做什么。

标签: python ftp discord


【解决方案1】:

感谢 cmets。 我相信它现在正在工作。

使用FTP库访问文件,使用StringIO库读取文件。

ftp = FTP('server')
ftp.login('username','password')
string = StringIO()
ftp.retrlines('RETR /filepath.json', string.write)

所以,通过这种方式,它被读取为字符串,然后使用 JSON 库进行解析。

stored = json.loads(string.getvalue())

然后,使用 json.append() 附加必要的代码行。

将字符串转换为字节。

dump = bytes.(json.dumps(stored), 'utf-8')

最后,写入新数据覆盖原始文件。

ftp.storbinary('STOR /filepath.json', io.BytesIO(dump))

我可能会让事情变得过于复杂,但不知何故,它终于奏效了。而且我可以轻松访问存储数据的文件。 生活很美好。

【讨论】:

  • 为了保持一致性,您应该使用retrlines + storlines 或retrbinary + storbinary,而不是组合它们+ 除此之外,您的方法是正确的。对于类似的问题,请参阅Automatic editing files on ftp。
猜你喜欢
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-02
相关资源
最近更新 更多