如何使用FTPLIB在Python中防止覆盖现有文件?
我写了一个Python程序,可以把用户输入的数据存储到一个sqlite数据库里。我想把这个数据库上传到FTP服务器。我尝试过用Python里的ftplib来实现。这里,所有使用这个程序的用户数据库文件名都是一样的。
我的问题是:
如果用户1把文件上传到FTP服务器,然后用户2再上传,文件就会被覆盖。我该怎么解决这个问题呢?
简单来说,我想知道怎么才能防止覆盖已有的文件,并且把当前要上传的文件在FTP服务器上重命名,这样我就能保留这两个文件了。
2 个回答
0
你的问题缺少一些细节,比如你用的是哪个版本的Python,你的操作系统是什么,还有最重要的是,复制的文件应该怎么命名。
我假设每个客户端程序都使用一个叫“userdata.db”的SQLite文件,而你想确保在FTP服务器上,每个复制的文件都能通过用户名来识别。
比如,用户Pamar在FTP服务器上的文件名会是userdata.db.pamar,而用户Lucy的文件名则会是userdata.db.lucy。
(顺便说一下,希望你有办法确保没有两个用户的名字是一样的)。
我想到的最简单的解决方案是:
使用shutil来创建一个临时的(本地的)数据库副本,并给它想要的名字,然后通过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)。
1
在上传文件之前,可以使用 ftplib.mlsd() 这个方法来查看文件夹里的内容。如果你要上传的文件已经存在,那就不要再上传了。
要注意这一点——如果有两个人同时在上传文件,用户A可能会上传文件并覆盖用户B的文件。