一个简单的otdr-sor文件解析器

pyOTDR的Python项目详细描述


sor(“标准otdr记录”)数据格式用于存储otdr (optical time-domain reflectometer )光纤数据。格式由telcordiaSR-4731, issue 2定义 标准。虽然它是一个标准,但不幸的是它没有开放 数据格式的细节是不公开的。你可以买 特尔科迪亚公司的标准文件,750美元(截至本文撰写之日)。 但这超出了我的预算。(很可能会有各种各样的 许可限制。我不知道,我从没见过 文档!)

有几个免费的otdr跟踪阅读器可用于 在Web上下载,但大多数不允许导出跟踪曲线 比如说,一个csv文件用于进一步分析,而我只找到了一个 在Linux上本机运行(但没有源代码;尽管 这些确实在葡萄酒仿真器中工作)。有人要求 互联网论坛询问如何提取跟踪数据的信息, 但我不知道有人除了指出 免费读者和Telcordia标准。

幸运的是,数据格式并不特别难破译。这个 TelcordiaSR-4731, issue 2目录 page提供了一些线索,就像wikipedia页面上的optical time-domain reflectometer一样。

使用二进制文件编辑器/查看器并比较 免费的otdr或文件阅读器,我可以把大部分 以sor数据格式编码并编写一个简单的程序(python) 解析sor文件并将跟踪数据转储到文件中。(对于 更详细的描述,除了阅读源代码之外,请参见my blog post)。

我的发现是为了供你娱乐,希望 这对其他人是有用的。但是要知道 这里所提供的是基于对有限数量的 样本文件。我不能保证没有错误,或者 我发现了所有可能的例外 从样本文件中。请自行承担风险!你已经 警告!

这个程序是从我原来的程序移植过来的 pubOTDR用perl编写。到 分析一个otdr sor文件,将程序运行为

pyOTDR.py myfile.sor

其中“mfile.sor”是sor文件的名称(路径)。otdr跟踪文件 将生成“myfile trace.dat”和一个json文件“myfile dump.json”。 您还可以使用以下命令将结果输出为XML文件“myfile dump.xml”:

pyOTDR.py myfile.sor XML

还有一个ruby版本 (rbOTDR),一个javascript/节点 版本(jsOTDR),和clojure 版本(cljotdr);clojure 寻找Java版本的人可能会对版本感兴趣,因为 clojure运行在java虚拟机(jvm)之上。

安装

这个程序需要Python2或Python3。要安装依赖项,请运行

pip install -r requirement.txt

我最近重新组织了整个包以提交给pypi(python 包索引)。现在您应该可以使用

pip install pyOTDR

这将创建一个名为pyotdr的可执行文件,可以随时使用。

Docker

有一个docker映像,您可以使用命令下载它

docker pull sidneyli/pyotdr:latest

如果你想自己建立docker镜像,一个docker文件 (dockerfile)可帮助您测试此程序。在顶端 级别目录,键入命令

make docker-build

或键入命令

docker build . -t sidneyli/pyotdr:latest

建立Docker的形象。下载基地需要一段时间 映像和编译。如果一切顺利,它应该成功地建立一个新的 docker imagesidneyli/pyotdr:latest。您可以使用命令进行检查:

docker images

一旦构建完成。现在可以运行命令

make docker-run

或者键入docker命令:

docker run -ti --rm -v $HOME:/data sidneyli/pyotdr:latest /bin/bash

旋转Docker映像的实例。这将启动一个命令 shell让您运行pyotdr.py程序。上面的docker命令 将您的主目录挂载到dock内的/data文件夹呃 实例。命令pyotdr.py(安装为/pyotdr/pyotdr.py)将 在你的行刑道路上。Docker实例在您 退出实例。

最新修订版2018-01-12

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

推荐PyPI第三方库


热门话题
java是否存在这样一种场景:Java7的Hashmap实现优于Java8的实现   java如何打印这些完整的数组?   java BuildException:未能执行aapt   java如何使用类。未知类型的集合返回的cast()   java准备语句返回错误的值   webview 安卓中的java显示身份验证对话框   java如何重命名列名JPA Hibernate   java查询从特定用户和特定时间段的Oracle表(通过比较原始表和备份表)中选择修改的行   java Youtube视频仅在三星S6设备上加载时自动暂停   未调用java RecyclerView getItemViewType   使用JSch setCommand执行带有源选项的java Shell ping命令时失败   java Hibernate:无法删除|删除分离的实例   Java Spring@MappedSuperclass字段作为子类中的@Id字段   java Android:确定单击了哪个按钮,因为该按钮未在xml中定义   如何计算java阵列内存使用率   使用Java查找按字母顺序排列的第一个字符串   javascript注销功能刷新页面,但页面仍已登录   当接口作为参数提供时,java依赖项注入不起作用   java中带原语的字符串扭曲