2012-03-08 69 views
-2
import ftplib 
import re 
import string 
ftp = ftplib.FTP('') # For access FTP link. 
ftp.login ("") 
ftpdir = ftp.cwd('') 
data=[] 
ftp.dir(data.append) 
for line in data: 
    string.find("DIR","data") 
    if "DIR" in line: 
      print line 

有了這段代碼,我得到了FTP服務器中存在的DIR名稱列表,現在我怎麼能找到DIR列表中的最後一列。我怎麼能找到最後列在目錄中的DIR

我的輸出是:

12-09-11 10:04PM  <DIR>   mcl_201147_hw79u_05 
    12-08-11 01:19AM  <DIR>   mcl_201148_hw79u_02 
    12-16-11 12:53PM  <DIR>   mcl_201149_hw79u_07 
    12-25-11 12:11AM  <DIR>   mcl_201150_hw79u_05 
    01-07-12 12:00AM  <DIR>   mcl_201151_hw79u_04 
    01-07-12 11:37PM  <DIR>   mcl_201152_hw79u_05 
    01-17-12 01:06AM  <DIR>   mcl_201201_hw79u_04 
    01-29-12 12:52AM  <DIR>   mcl_201202_hw79u_04 
    02-04-12 01:06AM  <DIR>   mcl_201203_hw79u_03 
    02-11-12 01:28AM  <DIR>   mcl_201204_hw79u_05 
    02-17-12 01:12AM  <DIR>   mcl_201205_hw79u_05 
    02-19-12 01:22AM  <DIR>   mcl_201206_hw79u_05 
    03-02-12 02:24AM  <DIR>   mcl_201207_hw79u_05 
    03-04-12 02:01AM  <DIR>   mcl_201208_hw79u_05 
    03-05-12 12:25PM  <DIR>   mcl_201209_hw79u_06 

我想找到最後DIR出現在列表(03-05-12 12:25 PM mcl_201209_hw79u_06)

回答

1

如果這是一個列表,你這樣做

try: 
    return data[-1] 
except IndexError as e: 
    return e 
// in your code you can just print "e" and you can continue like this... 

// version two demonstrate why try, except is useful 

def getdir(data): 
    try: 
    data[-1] 
    except IndexError as e: 
    return e 

.... 
print getdir(data)  
print 1+1 

假設東西是錯誤的索引列表,程序將不會停止:

list index out of range 
2 

這是你想要的嗎?


爲了有用,你應該使用記錄器來跟蹤e(錯誤信息)的,相反,返回默認值(如None),讓你知道有什麼不對的/沒有目錄存在。

我不確定string模塊在這裏有什麼用處。如果只是在列表中找到我需要的東西,我很少使用該模塊。


請給我這些描述並編輯您的原始帖子。

  1. 給我的print line
  2. 結果給我的print data
  3. 的結果,這是什麼dir你想要什麼?

在回答我的問題時,您可能會弄清楚如何解決它。

謝謝。


好的。所以,我認爲每一行是形式的記錄:

12-09-11 10:04PM <DIR> mcl_201147_hw79u_05 假設你沒有辦法讓time<DIR>,並dir-name獨立的,你可以這樣做

mystring = "12-09-11 10:04PM  <DIR>   mcl_201147_hw79u_05" 
dirname = mystring.split(" ")[-1] 
// ['12-09-11', '', '10:04PM', '', '', '', '', '', '', '<DIR>', '', '', '', '', '', '', '', '', '', 'mcl_201147_hw79u_05'] 
// and [-1] indicates the last element in the list (in reverse order) 

你也可以先嚐試' '.join(mystring.split()),然後再應用split()(沒有任何參數),但我認爲立即執行split會更容易,更高效,因爲第一種方法只會創建一個列表,而另一種方法會創建兩個列表。

如果lines尚未str類型,請嘗試查看str(line)是否有幫助。

如果您曾經需要查找所有dirname,請google list comprehension。它被認爲比循環更有效率。這是一種緊湊的方式來編寫你將要實現的目標......當然,根據你的要求適當的剝離。

+0

謝謝..我有不同種類的FTP位置的文件,我只想要DIR,當我得到所有的DIR名稱,我想找到目前在最後的位置DIR。 – user1227493 2012-03-08 10:02:55

+0

@ user1227493我很抱歉,但我不太瞭解這項要求。那麼'數據'中是什麼?目錄和文件?你是什​​麼意思'找到目錄出現在最後的位置?看我的編輯,以便我可以幫助。 – CppLearner 2012-03-08 17:26:32

+0

我的輸出is01-29-12上午12時52

mcl_201202_hw79u_04 12年2月4日上午01時06 mcl_201203_hw79u_03 12年2月11日上午01時28分 mcl_201204_hw79u_05 12年2月17日上午01點12分 mcl_201205_hw79u_05 02-19 -12上午01時22 mcl_201206_hw79u_05 12年3月2日上午02時24分 mcl_201207_hw79u_05 12年3月4日上午02時01 mcl_201208_hw79u_05 03-05-12 12:25 PM mcl_201209_hw79u_06 我想找到最後DIR存在列表(03-05-12 12:25 PM mcl_201209_hw7 9u_06) – user1227493 2012-03-09 11:04:04

0
import ftplib # For access FTP module 
ftp = ftplib.FTP('') # For access FTP link 
ftp.login ('') 
ftpdir = ftp.cwd('Working Directory') 
list = [] 
ftp.dir(list.append) # append all the ftp files in list 
temp = [] # Temp list 
for item in list: 
    if item.find('DIR') != -1: 
     temp.append(item) 
a = 0    
for item in temp: 
    a = a + 1 
print temp[-1] 

最後我能解決我的問題與上面的代碼,我們能夠過濾所有目錄的列表的幫助和之後,我們都能夠找到它位於最後一個目錄。感謝所有人的幫助。

相關問題