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

如何防止在Python中使用FTPLIB覆盖现有文件?,python,overwrite,ftplib,renaming,Python,Overwrite,Ftplib,Renaming,我制作了一个python程序,将用户输入的数据存储在sqlite数据库中。我想把它上传到ftp服务器。我尝试在python中使用ftplib。在这里,使用该程序的所有用户的数据库文件名都是相同的 这里,我的问题是 如果用户1将文件上载到ftp服务器,则下一个用户2将上载该文件。文件被覆盖。我怎样才能阻止这一切 公平:如何停止覆盖现有文件并在ftpserver中重命名当前(将要上载的文件)文件。因此,我将拥有这两个文件?用于在上载之前列出目录。如果给定的文件已经存在,那么不要上传它 注意这一点——

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

这里,我的问题是

如果用户1将文件上载到ftp服务器,则下一个用户2将上载该文件。文件被覆盖。我怎样才能阻止这一切

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

用于在上载之前列出目录。如果给定的文件已经存在,那么不要上传它


注意这一点——如果两个人同时上传,用户A仍有可能上传并覆盖用户B。

您的问题缺乏细节(其中包括:您使用的Python版本、您使用的操作系统以及最重要的是复制文件的命名方案)

我假设每个客户端程序都使用一个名为“userdata.db”的SQLite文件,并且您希望确保FTP服务器上的每个副本都由用户名标识

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

(顺便说一句,我希望你有办法确保没有两个用户同名)

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

用于制作具有指定名称的数据库的临时(本地)副本,通过FTP传输,然后将其删除

即,对于用户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)。

谢谢。但是,我希望这两个文件都在FTP服务器中。我建议在FTP服务器上为每个用户创建一个目录。每个用户上传到自己的干净目录。然后,您可以扫描不同的目录,将文件移动到真实的输出目录中。在这种情况下,我可以拥有多个同名目录吗?否。您可以编写或自定义自己的FTP服务器,它在后台为每个用户写入不同的目录,但这听起来。。。棘手的考虑重新设置项目的假设和目标,然后创建另一个堆栈溢出问题。你会得到更清楚的答案:)谢谢你的宝贵建议。可能会询问用户的电子邮件,并将其用作email.db是更好的选择。因为没有两个用户有相同的电子邮件。不清楚您希望如何命名目标(FTP服务器,在您的情况下)上的文件。请提供更多详细信息。如果该文件存在,我不想过度渲染。相反,我希望附加“1”,使其类似于filename1。请查看我的解决方案是否适合您的需要。我担心仅仅在文件名的末尾使用一个数字可能会导致一个用户从另一个用户覆盖文件,因此您最好考虑一种更健壮的命名算法。我正在windows xp下使用python 2.7。完成后,我将使用cx feeze使其可执行。我的程序结构是这样的:Main.db和Table-lucky(id,name,username,password)一旦用户登录,它就会创建一个文件夹数据库,其中它会创建一个带有username.db的db文件。我想将这个username.db文件上传到ftp服务器。我的问题是我会通过互联网把程序分发给其他人。无法在所有用户中检查用户名。它在系统内部进行测试,每个帐户只允许一个唯一的用户名。用户之间缺少唯一的ID恐怕是一个设计缺陷。当您的用户第一次运行程序时,是否有机会通过生成和存储ID来解决此问题?就像你在对方的评论中建议的那样使用电子邮件。