GNU/Linux >> Linux の 問題 >  >> Linux

Python FTPは日付で最新のファイルを取得します

next dir オプションを使用しないのはなぜですか?

ftp.dir('-t',data.append)

このオプションを使用すると、ファイルのリストは新しいものから古いものの順に並べられます。次に、リストの最初のファイルを取得してダウンロードします。


フォルダー内の最新のファイルを見つけるための完全なソリューションをお探しの方:

MLSD

FTP サーバーが MLSD をサポートしている場合 コマンド、解決策は簡単です:

entries = list(ftp.mlsd())
entries.sort(key = lambda entry: entry[1]['modify'], reverse = True)
latest_name = entries[0][0]
print(latest_name)

リスト

古い LIST に頼る必要がある場合 コマンドで返される独自のリストを解析する必要があります。

一般的な *nix リストは次のようになります:

-rw-r--r-- 1 user group           4467 Mar 27  2018 file1.zip
-rw-r--r-- 1 user group         124529 Jun 18 15:31 file2.zip

このようなリストでは、次のコードで実行できます:

from dateutil import parser

# ...

lines = []
ftp.dir("", lines.append)

latest_time = None
latest_name = None

for line in lines:
    tokens = line.split(maxsplit = 9)
    time_str = tokens[5] + " " + tokens[6] + " " + tokens[7]
    time = parser.parse(time_str)
    if (latest_time is None) or (time > latest_time):
        latest_name = tokens[8]
        latest_time = time

print(latest_name)

これはかなり脆弱なアプローチです。

MDTM

MDTM を使用すると、より信頼性が高くなりますが、効率が低下します。 個々のファイル/フォルダーのタイムスタンプを取得するコマンド:

names = ftp.nlst()

latest_time = None
latest_name = None

for name in names:
    time = ftp.voidcmd("MDTM " + name)
    if (latest_time is None) or (time > latest_time):
        latest_name = name
        latest_time = time

print(latest_name)

コードの代替バージョンについては、@Paulo による回答を参照してください。

非標準の -t スイッチ

一部の FTP サーバーは、独自の非標準 -t をサポートしています。 NLST のスイッチ (または LIST ) コマンド。

lines = ftp.nlst("-t")

latest_name = lines[-1]

FTP フォルダー内のファイルを変更時刻順に並べ替える方法を参照してください。

見つかったファイルをダウンロードしています

latest_name を取得したら、どのようなアプローチを使用しても構いません。 、他のファイルとしてダウンロードします:

with open(latest_name, 'wb') as f:
    ftp.retrbinary('RETR '+ latest_name, f.write)

こちらもご覧ください

  • Python で最新の FTP フォルダ名を取得する
  • Python ftplib を使用して FTP ファイルの変更時刻を取得する方法

NLST で 、Martin Prikryl の応答に示されているように、sorted を使用する必要があります メソッド:

ftp = FTP(host="127.0.0.1", user="u",passwd="p")
ftp.cwd("/data")
file_name = sorted(ftp.nlst(), key=lambda x: ftp.voidcmd(f"MDTM {x}"))[-1]

Linux
  1. Linux のディレクトリにある最新のファイルを取得する

  2. LinuxでPythonを使用してファイル作成時間を取得する

  3. Python でファイルまたはディレクトリの所有者を見つける方法

  1. Pythonでフォーマットされた日時を取得する方法

  2. Pythonで(MB)ファイルのtar.gzのサイズを取得する方法

  3. シェルで PYTHONPATH を取得するには?

  1. bashでファイルの絶対ディレクトリを取得するにはどうすればよいですか?

  2. ファイルの行数だけを取得する方法

  3. Dropbox ファイルの同期ステータスを取得するコマンド