

1行ごとにエポックタイムが昇順に記載されているテキストファイルがあり、各行のエポックタイムが1分づつのように等間隔で増加しているかどうかを確認したいのですが、テキストファイルのデータが連続値かどうかを識別するpythonのライブラリはないでしょうか?


CC BY-SA 4.0
2018-05-26T05:20:09.367
44273
2018-05-27T15:27:41.470
23485
question
python
pythonでデータが連続値かどうかを識別する


strptime()で日時をあらわす文字列から、datetimeに変換できます。例えば、以下のような感じで。

[code]

    from datetime import datetime
    t = datetime.strptime('2014/01/01 00:01:02', '%Y/%m/%d %H:%M:%S')
    
[/code]

strptimeの第一引数('2014/01/01
00:01:02'の部分)を、テキストファイルの1行から日時を抜き出したものに変え、第二引数('%Y/%m/%d
%H:%M:%S'の部分)をテキストファイルで用いられている日時表記の形式に変えてください

上下の行で、それぞれから取り出したdatetimeの差を求めて、どの行の間でも差が同じなら等間隔という事になります。


CC BY-SA 4.0
2018-05-26T07:56:28.083
44274
2018-05-26T07:56:28.083
217
44273
answer


エポックタイムが`1970年1月1日午前0時0分0秒から形式的な経過秒数`、いわゆる[UNIX
Time](https://ja.wikipedia.org/wiki/UNIX%E6%99%82%E9%96%93)を指していると仮定します。これは精度が秒なので、各行毎に数字が`60`ずつ増加しているか確認すれば良い、ということになります。

私の知る限りでは、少なくともそのようなライブラリは存在しません。

扱うテキストファイルのフォーマットが不明ですが、仮に1カラムのみのファイルとすると、下記コードで目的が達成できそうです。

t.py:

[code]

    def validate(cur, prev):
      if prev is None: return None # default
      return cur == (prev + 60)
    
    with open('t.csv', 'r') as f:
      prev = None
      for n, l in enumerate(f, 1):
        epoch = int(l, 10)
        is_valid = validate(epoch, prev)
        print('{}\t{}\t{}'.format(n, epoch, is_valid))
        prev = epoch
    
[/code]

t.csv:

[code]

    1527122450
    1527122510
    1527122550
    
[/code]

execute and result:

`python t.py`

> 1 1527122450 None  
>  2 1527122510 True  
>  3 1527122550 False


CC BY-SA 4.0
2018-05-27T15:27:41.470
44305
2018-05-27T15:27:41.470
7936
44273
answer