Pythonを使用してCSVファイルをAmazon S3にロードしようとしています。 CSVファイルの変更時刻を知る必要があります。 FTPをPython(2.7)に接続するためにftplibを使用しています。
MLST
またはMDTM
コマンドを使用してFTP経由で個々のファイルのタイムスタンプを取得できますが、ftplibではどちらもサポートされていません。
もちろん、_ FTP.voidcmd
を使用して、MLST
またはMDTM
を独自に実装できます。
見る:
MDTM
の簡単な例:
from ftplib import FTP
from dateutil import parser
# ... (connection to FTP)
timestamp = ftp.voidcmd("MDTM /remote/path/file.txt")[4:].strip()
time = parser.parse(timestamp)
print(time)
標準化されたファイルのタイムスタンプを返すことができるftplibライブラリによって明示的にサポートされる唯一のコマンドは、 FTP.mlsd
method を介したMLSD
です。ただし、その使用は、より多くのファイルのタイムスタンプを取得する場合にのみ意味があります。
MLSD
を使用して完全なディレクトリリストを取得するmodify
ファクトを取得するYYYYMMDDHHMMSS[.sss]
に従って解析します詳細については、 RFC 3659 を参照してください。
from ftplib import FTP
from dateutil import parser
# ... (connection to FTP)
files = ftp.mlsd("/remote/path")
for file in files:
name = file[0]
timestamp = file[1]['modify']
time = parser.parse(timestamp)
print(name + ' - ' + str(time))
MLST
、MLSD
およびMDTM
によって返される時刻はUTCであることに注意してください(サーバーが壊れていない限り)。したがって、ローカルのタイムゾーンに合わせて修正する必要がある場合があります。
もう一度、RFC 3659を参照してください 2.3。Times セクション:
時間値は常にUTC(GMT)で表され、サーバーPIの場所に示されている日時にどのカレンダーが使用されていたとしても、グレゴリオ暦で表されます。
FTPサーバーがMLST
、MLSD
、MDTM
のいずれもサポートしていない場合は、廃止された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 ftplib import FTP
from dateutil import parser
# ... (connection to FTP)
lines = []
ftp.dir("/remote/path", lines.append)
for line in lines:
tokens = line.split(maxsplit = 9)
name = tokens[8]
time_str = tokens[5] + " " + tokens[6] + " " + tokens[7]
time = parser.parse(time_str)
print(name + ' - ' + str(time))
Python FTPは日付で最新のファイルを取得する も参照してください。