我怎么能找到最后列表中的DIR

时间:2012-03-08 05:28:58

标签: python

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。

我的输出是:

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)

2 个答案:

答案 0 :(得分: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. 的结果
  3. 告诉我print data
  4. 的结果
  5. 你想要的dir是什么?
  6. 在回答我的问题时,你可能会想出如何解决它。

    感谢。


    好。所以我假设每一行都是表格的记录:

    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。它被认为比循环更有效。它是一种简洁的方式来编写您将要实现的目标......当然,根据您的要求进行适当的剥离。

答案 1 :(得分: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]

最后我能够在上面的代码的帮助下解决我的问题,我们能够过滤所有目录的列表,之后我们就能找到最后一个目录。感谢所有人的帮助。