Python newb在這裏,請耐心等待。我把一個腳本放在一起,通過FTP下載目錄中的所有文件。到目前爲止,我已經成功地連接並讀取一個文件,但我似乎無法使批量處理(獲得從目錄中的所有文件)這是我到目前爲止有:Python-FTP下載目錄中的所有文件
from ftplib import FTP
import os, sys, os.path
def handleDownload(block):
file.write(block)
print ".",
ddir='C:\\Data\\test\\'
os.chdir(ddir)
ftp = FTP('test1/server/')
print 'Logging in.'
ftp.login('user1\\anon', 'pswrd20')
directory = '\\data\\test\\'
print 'Changing to ' + directory
ftp.cwd(directory)
ftp.retrlines('LIST')
print 'Accessing files'
for subdir, dirs, files in os.walk(directory):
for file in files:
full_fname = os.path.join(root, fname);
print 'Opening local file '
ftp.retrbinary('RETR C:\\Data\\test\\' + fname,
handleDownload,
open(full_fname, 'wb'));
print 'Closing file ' + filename
file.close();
ftp.close()
我敢打賭,你可以告訴它並沒有做太多,當我運行它,所以任何改進建議,將不勝感激
PS這不是功課:DD
謝謝!
@Sosti,'在我的文章中提到的'retrlines'函數是一個超鏈接到文檔:) – sarnold 2011-03-08 10:52:25
非常感謝,他們都聽起來像可靠的建議!我忘了在Windows XP上使用Python 2.5提到im(如果這很有用)如果我使用MLSD選項'ftp.retrlines('MLSD')',代碼是否適用於迭代或需要修改更多? (確定它聽起來有點愚蠢,但在這裏新手,請記住?:DD) – Sosti 2011-03-08 11:00:21
@Sosti,你仍然需要修改你的代碼:你不能使用'os.walk()'函數。我將稍微編輯我的答案,以展示如何爲'retrlines'創建回調對象。 – sarnold 2011-03-08 11:27:17