2012-03-08 77 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] 

最后我能解决我的问题与上面的代码,我们能够过滤所有目录的列表的帮助和之后,我们都能够找到它位于最后一个目录。感谢所有人的帮助。

相关问题