2

設定された間隔で FTP ディレクトリからファイルをプルするスクリプトがあります。ただし、ファイルは移動ではなくコピーされるだけなので、同じファイルを何度もプルすることになります。新しいファイルのみをプルしていることを確認する最善の方法は何ですか? FTP サイトのファイルとローカル ディレクトリのファイルを相互参照することを考えていますが、その方法がよくわかりません。また、ファイル名だけでなく更新日もチェックするにはどうすればよいでしょうか。例: random_file.txt は、もともと 2012 年 10 月 25 日午後 2 時 15 分に FTP サイトに配置され、5 分後にダウンロードされました。その後、2012 年 10 月 26 日午前 11 時 40 分に、FTP サイトの random_file.txt が更新されたバージョンに置き換えられました。FTP サイトからダウンロードしたり、ローカル ディレクトリのファイルを新しいファイルだけに上書きしたりできますか? ありがとう!

これが私の既存のコードです:

import ftplib, os

def fetch():
    server = 'ftp.example.com'
    username = 'foo'
    password = 'bar'
    directory = '/random_directory/'
    filematch = '*.txt'
    ftp = ftplib.FTP(server)
    ftp.login(username, password)
    ftp.cwd(directory)
    for filename in ftp.nlst(filematch):
        fhandle = open(os.path.join('C:my_directory', filename), 'wb')
        print 'Getting ' + filename
        ftp.retrbinary('RETR ' + filename, fhandle.write)
        fhandle.close()

更新:だから私はSiddharth Toshniwalのリンクを使用して、少なくとも部分的にそれを理解しました. これに出くわして必要になる可能性がある人のために、これまでの私の新しいコードを示します。これは、変更日ではなく、ファイルの存在のみをチェックすることに注意してください。

for filename in ftp.nlst(filematch):
        if os.path.exists('C:\my_directory\\' + filename) == False:
            fhandle = open(os.path.join('C:\my_directory', filename), 'wb')
            print 'Getting ' + filename
            ftp.retrbinary('RETR ' + filename, fhandle.write)
            fhandle.close()
        elif os.path.exists(('C:\my_directory\\' + filename)) == True:
            print 'File ', filename, ' Already Exists, Skipping Download'
4

1 に答える 1

2

Pythonで何かをハックするのではなく、rsyncのようなものを使用するという意見に賛成です。

しかし、何らかの理由でそれが実現できない場合は、次のリンクが役立ちます : http://code.activestate.com/recipes/327141-simple-ftp-directory-synch/ /get-a-files-last-modified-datetime-using-python/

于 2012-10-26T22:54:08.473 に答える