2017-02-22 8 views
2

python3でログファイルから最新のタイムスタンプを取得する方法。ログファイルはmb単位でもgb単位でも可能です。Pythonで最新のタイムスタンプを取得

from collections import deque 
with open(file_name) as f: 
    last_line = deque(f, maxlen=1).pop() 

あなたがまたするためにitertools.dropwhile()を使用することができます。

eg : The format is 2017-02-13 17:58:38 


2017-02-13 20:07:17 [HTTP-9] DEBUG 
2017-02-17 20:07:18 [HTTP-9] DEBUG 
2017-02-20 20:07:18 [HTTP-9] DEBUG 
. 
. 
+0

time_string = last_line.rsplit(' ', 2)[0] 

それとも、時刻オブジェクト、またはtimestampに変換したい場合にあなたのためのコードを書く。多くのユーザーは、苦労しているコーダーのコードを作成したいと考えていますが、通常、ポスターが既に問題を解決しようとしているときにのみ役立ちます。この努力を実証する良い方法は、これまでに書いたコード、サンプル入力(もしあれば)、期待される出力、実際に得られる出力(出力、トレースバックなど)を含めることです。あなたが提供する詳細があれば、受け取る可能性のある回答が増えます。 [FAQ](http://stackoverflow.com/tour)と[How to Ask](http://stackoverflow.com/questions/how-to-ask)を確認してください。 – TigerhawkT3

+2

SOはコーディングサービスではないため、この質問を議論の対象外としています。 – TigerhawkT3

+2

あなたが示したファイルのセクションから、必要なのは最後の行だけです。単純な 'tail -1 filename.txt'でそれを得ることができます。 – TigerhawkT3

答えて

0

一つの方法は、時間を抽出するためにstr.split()メソッドを使用し、最後の行を取得するために、最大サイズ1とcollections.dequeを使用していますファイルオブジェクト(イテレータのようなオブジェクト)の行を、行末に基づいて一定の基準を満たすまでドロップします。両方の方法あなたのバンで

from itertools import dropwhile 
with open(file_name) as f: 
    last_line = next(dropwhile(lambda x: not x.endswith('G'), f)) 
    # note that in aforementioned function supposed that all the lines ends with G (apparently, but all except the last line ends with newline) 

次のような時間を取得する:あなたが私たちをしたいように見えます

from datetime import datetime 
datetime.strptime(time_string, '%Y-%m-%d %H:%M:%S') 
datetime.strptime(a, '%Y-%m-%d %H:%M:%S').timestamp() 
+0

上記のコードを使用して最新のタイムスタンプを取得していますか? – skyrocker

+0

@skyrocker最後に 'str.split()'を使ってその行から時間を抽出することができます。 – Kasramvd

+0

コレクション - dequeは試してみるとエラーを投げます。 last_line = d(f).pop() TypeError: 'collections.deque'オブジェクトが呼び出せません – skyrocker

関連する問題