0

问题是:

我有一个本地目录“/local”和一个包含子目录和文件的远程 FTP 目录“/remote”我想检查'/remote'的子目录中是否有任何新文件。如果有,则将它们复制到'/local'

问题是:

我使用了正确的策略吗?这完全是矫枉过正吗,有没有更快的pythonic方法来做到这一点?免责声明:我是一个尝试学习的python n00b。所以要温柔...... =)这就是我尝试过的:

在 /local 及其子目录中创建所有文件的列表。

LocalFiles=[]
for path, subdirs, files in os.walk(localdir): 
    for name in files:                     
        LocalFiles.append(name)

做一些 ftplib 魔术,使用ftpwalk()并将其结果复制到表单列表中:

 RemoteFiles=[['/remote/dir1/','/remote/dir1/','/remote/dir3/'],['file1.txt','file12.py','file3.zip']]

所以我有每个文件对应的目录。然后通过比较文件名列表来查看哪些文件丢失了,

missing_files= list(set(RemoteFiles[1]) - set(LocalFiles))  

一旦我找到了他们的名字,我就会尝试找到带有那个名字的目录,

for i in range(0,len(missing_files)):
    theindex=RemoteFiles[1].index(missing_files[i])

这让我可以构建丢失文件及其目录的列表,

MissingDirNFiles.append([remotefiles[0][theindex],remotefiles[1][theindex]])

所以我可以用ftp.retrbinary复制它们。这是一个合理的策略吗?任何提示、评论和建议都值得赞赏 [尤其是对于大量文件]。

4

1 回答 1

1

如果您获得本地和远程 FTP 目录的修改时间并将其存储在数据库中,则可以修剪对新文件或修改文件的搜索。这应该会显着加快同步过程。

于 2011-07-27T20:40:10.397 回答