实用程序检测给定数字输入的可能日期/时间格式。

epoch_analyzer的Python项目详细描述


https://travis-ci.org/martinvw/epoch-analyzer.png?branch=masterhttps://coveralls.io/repos/martinvw/epoch-analyzer/badge.png?branch=master

一个python模块,用于分析数字,以确定它们可能基于哪个纪元,以及它们可能以什么单位表示。

安装

  1. 使用pip安装:

    pip install epoch_analyzer

    对于Windows:

    py -m pip install epoch_analyzer

    或者,您可以下载或克隆此repo并调用pip install -e .

在python中的用法

从包epoch_分析器导入EpochTester

from epoch_analyzer import EpochTester

如果您愿意,可以传递一个用作参考的最小日期和最大日期。

给定结果对象,您可以调用test或convert,以测试可能的格式的数字,或者(批处理)将数字列表转换为日期

使用epochtester.测试

您可以将一个数字(例如计数器)传递给此方法。

对于每个数字执行一次测试转换,然后检查哪个格式与大多数值匹配,将返回一个counter对象。通过对该对象调用most_common,可以从最可能的选项开始按顺序迭代项

fromepoch_analyzerimportEpochTestertester=EpochTester()results=tester.test({12345435,2999663906})formatch,occurrenceinresults.most_common():print("\t%s:\t%d%%"%(match,occurrence))

使用epochtester.convert

如果您有一个未知类型,并希望转换到所有可能的选项,您可以使用此方法如果您已经知道获取转换器并使用它的更好格式,请参见下面描述的选项。

fromepoch_analyzerimportEpochTestertester=EpochTester()results=tester.convert({12345435,2999663906})forinput,matchesinresults.items():print("%d: #%d matches"%(input,len(matches)))forlabel,resultinmatches:print("\t%s:\t%s%%"%(label,result))

输出:

2999663906: #1 matches
4-Bytes bit-based timestamp since 1970:        2014-11-05 19:52:34%
12345435: #0 matches

特定转换的用法

如果你知道你用的是哪个历元,并且你正在转换单个数字,那么转换就相当简单了在这种情况下,您不必使用convert方法,而只需请求特定的转换器并使用它,请参见下面的示例。

fromepoch_analyzerimportEpochTesterconvertor=EpochTester().get_convertor('4-Bytes bit-based timestamp since 1970')print(convertor.convert_to_date(2999663906))# prints '2014-11-05 19:52:34'

从命令行使用

正确安装模块后,路径中应该可以使用命令epoch。有很多选项,这些选项在调用没有任何参数的命令时列出

一些示例:

只需转换一个值:

epoch 1394543556

输出:

For input 1394543556:
  Number Of Seconds Since Unix Epoch (2014-03-11 13:12:36)

转换文件中的时间戳列表,并将其作为unix时间戳输出到文件中。

epoch -f input.txt -u > output-timestamps.txt

从文件的时间戳列表中总结匹配项。

epoch -f input.txt --summary

输出:

Summary for5 inputs:
      1.      Number Of Seconds Since Unix Epoch:     40%
      2.      Number Of Minutes Since Mac OSX Epoch:  40%
      3.      Number Of Mili Seconds Since Unix Epoch:        20%

提供一个最小值(在这种情况下,超出此unixtime的范围):

epoch --min2014-12-01 1394543556

输出:

For input 1394543556:
  No matching pattern was found

支持空格分隔的十六进制输入:

epoch "aa bb" --hex

输出(请注意,big和little endian都经过测试):

For input 48042:
      No matching pattern was found
For input 43707:
      No matching pattern was found

命令行中的用法:扫描二进制文件

正确安装模块后(请注意,termcolor是一个先决条件),路径中应该可以使用命令epoch\u scan。有很多选项,这些选项在调用没有任何参数的命令时列出

表格宽度是制作列和点模式所必需的。如果您的数据具有固定的表宽度,那么在大多数情况下,只需调整十六进制编辑器的大小,直到您看到清晰的重复或相似数据列显示出来,就很容易检测到它。比较以下两个示例:

ª..!B....tI.v..:r.#..gd.....l...._..2..9D.a..T..d...ª..!B ........
.wª..!B....tI.w..9r.#..gd.....l...._..2..9D.a..T..d...ª..!B ......
...wª..!B....tI.w..9r.#..gd.....l...._..2..9D.a..T..d...ª..!B ....
.....wª..!B....tI.w..9q."..id.....l...._..2..9D.a..T..d...ª..!B ..
.......wª..!B....tI.w..9q."..id.....l...._..2..9D.a..T..d...ª..!B
.........w
ª..!B....tI.v..:r.#..gd.....l...._..2..9D.a..T..d...ª..!B .........w
ª..!B....tI.w..9r.#..gd.....l...._..2..9D.a..T..d...ª..!B .........w
ª..!B....tI.w..9r.#..gd.....l...._..2..9D.a..T..d...ª..!B .........w
ª..!B....tI.w..9q."..id.....l...._..2..9D.a..T..d...ª..!B .........w
ª..!B....tI.w..9q."..id.....l...._..2..9D.a..T..d...ª..!B .........w

一些示例:

扫描上述文件中的epoch值:

epoch_scan -t 44 raw.log

输出:

Sample picked from offset: 4440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(big end.)22282752=>   1970-05-10 00:08:00    4-Bytes bit-based timestamp since 1970[0.900000]440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(little end.)1677722196=>   None                   4-Bytes bit-based timestamp since 1970[0.900000]440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(little end.)   -1441202176     =>   2012-08-12 16:00:00    4-Bytes bit-based timestamp since 1970[0.900000]440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(little end.)1109458944=>   1986-08-16 16:00:00    4-Bytes bit-based timestamp since 1970[0.900000]440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(big end.)      -1441791967     =>   2012-08-08 00:00:33    4-Bytes bit-based timestamp since 1970[0.900000]440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(little end.)1109458960=>   1986-08-16 16:00:16    4-Bytes bit-based timestamp since 1970[0.900000]440361020154020064000019 AA000021 422000050000000000000077 AA100021 421000010774490177000539(little end.)117506064=>   None                   4-Bytes bit-based timestamp since 1970[0.900000]

输出显示文件中的随机样本每个匹配项都高亮显示(蓝色表示大端,绿色表示小端)。字节以大写十六进制显示,并以4字节为一组显示为了帮助解释结果,将显示匹配格式的数值和转换后的值。

其他可能有用的选项包括:

  • 使用固定样本-s
  • 如果您期望特定的时段,请定义–min或–max
  • 将项目数限制为进程-c

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java根据选择随机设置图标   java如何将Android Studio与本地服务器数据库SQL server 2008连接?   java在点击鼠标后绘制一个椭圆形   java选项窗格相对于其父项的位置   java如何在Android中的switch case中使用String[]输入?   安卓无法从“15.0.1”确定java版本   如果满足特定条件,java是否重置计时器?   java是一个实体类,可以在OOAD中返回其他实体实例吗?   bash将对jar文件| cut | awk和java程序的调用集成到一个统一进程中   Spring安全更新身份验证成功时的最后登录日期   数据库身份验证中基于Java控制台的客户端服务器登录应用程序错误   java Selenium junit测试失败,驱动程序过早获取URL   java LibGdx多点触摸事件混淆   带扫描仪的java打印空间   来自旧版应用程序的java springcloudsleuth头   java如何实现模板设计模式?   java如何比较具有多个值的键的两个映射?   读取时R中的java MemoryError。xlsx