設定された間隔で 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'