如何在Python中使用FTPLIB防止覆盖现有文件?

时间:2014-06-03 21:58:57

标签: python overwrite ftplib renaming

我制作了一个python程序,用于将用户输入的数据存储在sqlite数据库中。我想将它上传到ftp服务器。我尝试在python中使用ftplib。这里,使用该程序的所有用户的数据库文件名都是相同的。

在这里,我的问题是

如果user1将文件上传到ftp服务器,则下一个user2上传它。该文件被覆盖。我怎么能阻止这个?

公平地说:如何在ftpserver中停止覆盖现有文件并重命名当前(要上载的文件)文件。那么,我将拥有这两个文件?

2 个答案:

答案 0 :(得分:0)

在上传之前使用ftplib.mlsd()列出目录。如果给定的文件已经存在,则不要上传。

小心这一点 - 如果两个人同时上传,用户A仍然可以上传并覆盖用户B.

答案 1 :(得分:0)

你的问题缺乏细节(其中包括:你正在使用什么版本的Python,你在使用什么操作系统,最重要的是复制文件的命名方案应该是什么)。

我假设每个客户端程序都使用名为" userdata.db"的SQLite文件。并且您要确保在FTP服务器上每个副本都由用户名标识。

所以用户:Pamar将在ftp服务器上拥有userdata.db.pamar,而User:Lucy将以userdata.db.lucy结束

(我希望你有办法确定没有两个用户有相同的名字,顺便说一下。)

我能想到的最简单的解决方案是:

使用shutil制作具有所需名称的数据库的临时(本地)副本,通过FTP传输,然后将其删除。

即,在User Pamar的情况下,您将拥有:

  • 第1步:复制/userhome/pamar/userdata.db - > /userhome/pamar/userdata.db.pamar
  • 步骤2:FTP传输/userhome/pamar/userdata.db.pamar - > FTPServer
  • 第3步:删除/userhome/pamar/userdata.db.pamar

它不是很优雅,你会在(本地)文件系统上使用一些额外的空间,直到副本完成,如果userdata.db特别大(如果你那么大,那么这可能会有问题)可能不会首先使用sqlite)。