2014-01-14 95 views
-1

我想列出一個ftp directory的文件夾,以便輸出如下:如何列出ftp目錄中的所有文件夾?

[32114, 32115, 32116, ..., 42123] 

下面的腳本訪問FTP站點。如何使用附加的腳本作爲開始訪問ftp目錄中的文件夾?

import arcpy, ftplib, os, socket 

HOST = 'atlas.ca.gov' 
DIRN = '/pub/naip/2012/doqqs_combined_color-nir/' 
workspace = 'F:/download/location' 

# Get current working directory 
print 'The current working directory is %s' % os.getcwd() 

# Change the current working directory to a download folder 
os.chdir(workspace) 
print 'The workspace has been changed to %s' % workspace 

try: 
    f = ftplib.FTP(HOST) 
except (socket.error, socket.gaierror), e: 
    print 'ERROR: cannot reach "%s"' % HOST 
print '*** Connected to host "%s"' % HOST 

try:  
    f.login() 
except ftplib.error_perm: 
    print 'Error: cannot login anonymously' 
    f.quit() 
print '*** Logged in as "anonymous"' 

try: 
    f.cwd(DIRN) 
except ftplib.error_perm: 
    print 'ERROR: cannot CD to "%s"' % DIRN 
    f.quit() 
print '*** Changed to "%s" folder' % DIRN 

回答

1

如果你看一下ftplib文檔,這是你的兩個明顯的功能:nlstdir

任一人都會爲您提供目錄中所有成員的列表,包括文件和子目錄。

隨着nlst,你不會得到超出名稱的任何信息。但是,如果您打算使用chdir或以其他方式使用它們中的每一個,那沒關係;你會得到那些原來是普通文件的例外,並且可以跳過它們。

dir,你得到一個完整的目錄列表,以可讀的形式。你必須捕獲它(通過傳遞一個callback函數),然後手動解析 - 這是一個很少有趣的事情,但是事先知道哪些成員是文件,哪些是目錄的唯一方法。

1

如果服務器是Windows機器的 ftp.dir()輸出將看起來像01-14-14 04:21PM <DIR> Output

如果服務器的* nix的品種,產量將看起來像drwx------ 3 user group 512 Apr 22 2005 Mail

如果你想檢查如果某個項目是目錄,請在每一行上使用正則表達式。 如果該項目是一個目錄,並且* nix ftp服務器將以d開頭,則Windows FTP服務器將包含<DIR>

你需要Python正則表達式的幫助嗎?

0

大廈由abarnert答案,下面產生的名單:

from ftplib import FTP 
ftp = FTP('atlas.ca.gov') 
ftp.login() 
ftp.cwd('/pub/naip/2012/doqqs_combined_color-nir/') 
print ftp.nlst() 

enter image description here

相關問題