私はPythonを学び、2つのディレクトリを同期させるためのコードを書こうとしています:1つはftpサーバにあり、もう1つはローカルディスクにあります。これまでのところ、私は、作業コードを書いたが、私はそれについての質問または2 :)pythonのftplibでディレクトリを同期する
import os
from ftplib import FTP
h_local_files = [] # create local dir list
h_remote_files = [] # create remote dir list
h_local = 'C:\\something\\bla\\' # local dir
ftp = FTP('ftp.server.com')
ftp.login('user', 'pass')
if os.listdir(h_local) == []:
print 'LOCAL DIR IS EMPTY'
else:
print 'BUILDING LOCAL DIR FILE LIST...'
for file_name in os.listdir(h_local):
h_local_files.append(file_name) # populate local dir list
ftp.sendcmd('CWD /some/ftp/directory')
print 'BUILDING REMOTE DIR FILE LIST...\n'
for rfile in ftp.nlst():
if rfile.endswith('.jpg'): # i need only .jpg files
h_remote_files.append(rfile) # populate remote dir list
h_diff = sorted(list(set(h_remote_files) - set(h_local_files))) # difference between two lists
for h in h_diff:
with open(os.path.join(h_local,h), 'wb') as ftpfile:
s = ftp.retrbinary('RETR ' + h, ftpfile.write) # retrieve file
print 'PROCESSING', h
if str(s).startswith('226'): # comes from ftp status: '226 Transfer complete.'
print 'OK\n' # print 'OK' if transfer was successful
else:
print s # if error, print retrbinary's return
コードのこの作品は、2つのPythonのリストにする必要があります:ローカルディレクトリ内のファイルのリストやFTPでのファイルのリストをディレクトリ。リストから重複を削除した後、スクリプトは欠落しているファイルをローカルディレクトリにダウンロードする必要があります。今のところ、
をコードのこの作品は私が必要なものをやっているが、私はそれを実行したときに、私の出力は、私はそれが例えば:)
を作用するであろうと想像どのように作用していない、私の現在の出力が行くことに気づきました:
PROCESSING 2012-01-17_07.05.jpg
OK
# LONG PAUSE HERE
PROCESSING 2012-01-17_07.06.jpg
OK
# LONG PAUSE HERE
PROCESSING 2012-01-17_07.06.jpg
OK
etc...
が、私はそれがこのように動作しなければならないことを想像:私が言ったように
PROCESSING 2012-01-17_07.05.jpg
# LONG PAUSE HERE (WHILE DOWNLOADING)
OK
PROCESSING 2012-01-17_07.06.jpg
# LONG PAUSE HERE (WHILE DOWNLOADING)
OK
PROCESSING 2012-01-17_07.06.jpg
# LONG PAUSE HERE (WHILE DOWNLOADING)
OK
etc...
、私はちょうどのpythonを学ぶために始めた、そして多分私は完全に間違ってここにいくつかのものをやってる(if str(s).startswith('226')
????)。多分私はftplib
だけでこれを達成できませんか?だから最後に私の質問は:
私はここで間違っていますか? :)
「適切な」出力を生成し、ファイル(ドットの少なくともライン)をダウンロードしながら、例えば、状態のいくつかの種類を印刷する方法がある方法 :助けるため
PROCESSING 2012-01-17_07.05.jpg
..........
OK
PROCESSING 2012-01-17_07.06.jpg
......
OK
PROCESSING 2012-01-17_07.06.jpg
...............
OK
etc...
おかげでたくさんの!
ありがとうございます! :) – errata