【问题标题】:python: copy only missing files from FTP dirs and sub-dirs to local dirs and sub-dirspython:仅将丢失的文件从 FTP 目录和子目录复制到本地目录和子目录
【发布时间】:2011-10-14 14:11:34
【问题描述】:

问题是:

我有一个本地目录 '/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 复制它们。 这是一个合理的策略吗?感谢任何提示、cmets 和建议 [尤其是对于大量文件]。

【问题讨论】:

    标签: python list compare directory ftplib


    【解决方案1】:

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

    【讨论】:

    • 感谢您的建议。我忘了提到 /local 和 /remote 中的子文件夹是不同的。 /remote 中的新文件需要根据某些标准发送到 /local 中的“鸽窝”(一些与名称相关的正则表达式,但与目录无关)。
    • 好的,我明白了,但是您仍然可以通过查找 /remote 中子目录的修改时间的变化来加快 /remote 中新文件或修改文件的本地化。
    猜你喜欢
    • 2019-11-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2017-01-16
    • 2011-11-03
    • 1970-01-01
    • 2011-02-23
    • 2020-04-21
    相关资源
    最近更新 更多