2009-08-26 14 views
3

ftpのディレクトリリストから最新のファイルを特定する方法を教えてください。 UNIXのタイムスタンプでmax関数を使用しましたが、ftpのリストは解析するのが難しいです。各行の内容はスペースで区切られています。Python FTP最新のファイル

from ftplib import FTP 
ftp = FTP('ftp.cwi.nl') 
ftp.login() 
data = [] 
ftp.dir(data.append) 
ftp.quit() 
for line in data: 
    print line 

は出力:

drwxrwsr-x 5 ftp-usr pdmaint  1536 Mar 20 09:48 . 
dr-xr-srwt 105 ftp-usr pdmaint  1536 Mar 21 14:32 .. 
-rw-r--r-- 1 ftp-usr pdmaint  5305 Mar 20 09:48 INDEX 
+0

の可能な複製を[PythonのFTPは日によって最新のファイルを取得](https://stackoverflow.com/questions/8990598/python-ftp-get最も最近のファイル単位) –

答えて

0

あなたは、各ラインを分割し、日付を取得することができます:

date_str = ' '.join(line.split(' ')[5:8]) 

その後、日付を解析(egenix mxDateTimeパッケージ、特にDateTimeFromString機能をチェックしてください)へ匹敵するオブジェクトを得る。

2

日付を解析するためには、(以降、バージョン2.5から)を使用することができます:

datetime.datetime.strptime('Mar 21 14:32', '%b %d %H:%M') 
4

はいくつかの修正を行うために:

date_str = ' '.join(line.split()[5:8]) 
time.strptime(date_str, '%b %d %H:%M') # import time 

を、最新のファイルを見つけることが

for line in data: 
    col_list = line.split() 
    date_str = ' '.join(line.split()[5:8]) 
    if datePattern.search(col_list[8]): 
     file_dict[time.strptime(date_str, '%b %d %H:%M')] = col_list[8] 
     date_list = list([key for key, value in file_dict.items()]) 
s = file_dict[max(date_list)] 
print s 
4

FTPサーバーがMLSDコマンドをサポートしている場合(可能性もあります)、関連する質問でthat答えのFTPDirectoryクラスを使用してください。

(例えばAFTP)ftplib.FTPインスタンスを作成し、FTPDirectoryインスタンス(例えばaftpdir)、サーバーにしたいディレクトリへ.cwdを接続し、aftpdir.getdata(aftp)を使用してファイルを読み込みます。その後、あなたに新鮮なファイルの名前を取得します:

import operator 

max(aftpdir, key=operator.attrgetter('mtime')).name 
関連する問題