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)

ftpwalk()を使用して ftplib マジックを実行し、その結果を次の形式のリストにコピーします。

 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 に答える