Python:仅将FTP目录及子目录中缺失的文件复制到本地目录及子目录

0 投票
1 回答
837 浏览
提问于 2025-04-16 22:23

问题是:

我有一个本地目录'/local'和一个远程FTP目录'/remote',里面有很多子目录和文件。我想检查一下在'/remote'的子目录中是否有新文件。如果有的话,就把它们复制到'/local'

我的疑问是:

我这样做的策略对吗?这样做是不是太复杂了?有没有更快、更简单的方法来实现这个?
声明一下:我还是个Python新手,正在学习,所以请多多包涵... =)

这是我尝试过的:

首先,我创建了一个包含/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把它们复制过来。这样做合理吗?如果有任何建议、评论或意见,我都非常欢迎,尤其是对于大量文件的情况。

1 个回答

1

如果你能获取本地和远程FTP目录的修改时间,并把这些信息存储到数据库里,那么你就可以更有效地查找新文件或修改过的文件。这样做可以大大加快同步的过程。

撰写回答