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

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第三方库


热门话题
安卓 studio安装的java Unity本机广告   java如何将映射转换为对象   java我试图使用rest控制器从h2数据库中检索记录,但它说没有数据集   反思为什么会抛出java。lang.InstanceException?   在opensuse中找不到Java/javac   java为Android上的谷歌地图添加了5900多个标记。如何有效地做   java如何在if语句中使用循环   java如何在JPA(Hibernate)中映射一对多关系和复合主键?   如何在Java中读取和写入外部进程?   Java线程。睡眠时间最短   java使用EclipseGradle插件如何离线托管和使用依赖项(库jar文件)   java为什么虚拟引用在排队时没有被清除?   java无法理解如何创建用于响铃报警的取消按钮   java解析不应通过注入容器错误发生   java Toast或ProgressDialog不显示   java在自定义对象上使用优先级队列的更好方法   java格式的。wmv文件。(或者任何视频文件都很好)   从页面调用另一个侦听器后,不会调用java JSF<f:ajax>侦听器   java注释ConfigApplicationContext不能多次刷新有什么原因吗?