解析dlis文件的python库

dlisp的Python项目详细描述


简介

dlis文件解析器(数字日志交换标准),一种用于测井数据的二进制格式,由RP66 Version 1

范围

这个解析器可以处理rp66版本1的可见envolope和逻辑格式,这意味着只要它是一个dlis文件,最终在计算机/服务器上,这个解析器就应该能够读取和解析它。但是,它在磁盘磁带中,此解析器将无法解析它。 标准中定义的大多数格式都已涵盖,例如

  • 一个dlis文件中的逻辑文件和多个逻辑文件
  • eflr(公共eflr和私有eflr)和iflr(fdata、eof和noform iflr)
  • 多维数据
  • 此解析器对加密的dlis文件的支持有限。例如,它只能从逻辑记录段读取生产者的公司代码。也无法读取加密的fdata
  • 目前这个解析器只支持RP66版本1,版本2不在作用域内,因为它没有被积极使用。
  • 到目前为止,仅支持读取DLIS文件,不支持写入或更新

安装

现在我们还没有在https://pypi.org托管这个解析器,但是您仍然可以通过pip install

  • 确保您有python 3.5+
  • (可选)使用python 3.5+创建virtualenv
  • 转到此存储库的父文件夹,然后安装程序包pip install -e dlispy

如何使用

下面是演示如何使用其api的代码片段:

将其用作命令行工具

将其作为包安装后,可以使用以下命令转换单个DLIS文件或包含DLIS文件的文件夹: python -m dlispy.core --input=<path to single dlis file or a folder> --output=<output path> --eflronly=<if True only dump EFPRs, otherwise dump everything>

输出

当使用此解析器解析某个dlis文件并生成输出时,在指定的输出目录中,可以预期原始dlis文件中的每个逻辑文件都有一个文件夹。在每个逻辑文件文件夹中,包含以下部分:

  • 名为UnformattedDataLogicalRecords的目录,其中包含所有未格式化的数据逻辑记录。对于每个记录,有两部分,二进制数据文件和json文件描述其CONSUMER-NAMEDESCRIPTION
  • 表示逻辑文件中所有eflr的json文件
  • 一组csv文件,每个文件代表一帧的所有fdata。注意:通道的值可以是单个整数、浮点整数列表或多维卷。 解析总是将高维卷压缩为一维列表,例如,维度为[320,6]的通道值将压缩为长度为1920(320x6)的列表。在得到这样的列表之后,您可以回顾csv文件,找出维度并恢复到其高维度表示。

如何解析dlis文件并遍历逻辑记录:

fromdlispyimportLogicalFile,Object,Attribute,FrameData,PrivateEncryptedEFLR,parse# you can also set eflrOnly as True to only load EFLRs_,logical_file_list=parse('../data/206_05a-_3_DWL_DWL_WIRE_258276498.DLIS',eflr_only=False)forlfinlogical_file_list:# type:LogicalFileprint("LogicalFile with ID:{}, SequenceNumber:{}".format(lf.id,lf.seqNum))foreflrinlf.eflrList:iftype(eflr)isPrivateEncryptedEFLR:# PrivateEncryptedEFLR needs to handle separately.continueprint("     Set with Type:{}, Name:{}".format(eflr.setType,eflr.setName))forobjineflr.objects:# type:Objectprint("             Object with Name:{}".format(obj.name))forattributeinobj.attributes:#type:Attributeprint("                     Attribute with Label:{}, Value:{}, Count:{}, RepCode:{}, Units:{} ".format(attribute.label,' '.join(map(str,attribute.value))iftype(attribute.value)islistelseattribute.value,attribute.count,attribute.repCode,attribute.units))forframeName,fDataListinlf.frameDataDict.items():print("     Frame:{}".format(frameName))forfdatainfDataList:# type:FrameDataprint("             FrameData with FrameNumber:{} and {} of slots".format(fdata.frameNumber,len(fdata.slots)))

如何将DLIS文件转储为可读格式

在这个示例代码中,您可以看到如何将dlis文件转储为读取格式,包括。因为每个dlis文件可以包含一个或多个逻辑文件, 逻辑记录与跨逻辑文件之间不存在依赖关系,因此它意味着对每个逻辑文件分别进行处理,因此我们创建 对于给定输出路径中的每个逻辑文件,我们使用逻辑文件的id作为文件夹名。在每个文件夹中,都有以下内容:

  • 一个json文件,包含此逻辑文件中的所有eflr(公共和私有oen)
  • 一组csv文件代表一个帧。文件的命名约定是<origin of ObjectName>_<copy of ObjectName>_<identifier of ObjectName>.csv。 在csv文件中,每列代表一个通道,每行代表一个framedata。对于高维信道,该值被压缩为 维度数组和用户可以使用json文件中的channel dimension属性将其转换回。
  • 名为UnformattedDataLogicalRecords的文件夹,所有Unformatted Data LogicalRecords都以二进制格式存储在该文件夹中。
fromdlispyimportdump# you can also set eflrOnly as True to only dump the EFLRs as json file load EFLRsdump('../data/206_05a-_3_DWL_DWL_WIRE_258276498.DLIS',output_path='output',eflr_only=False)

提前使用

在这个示例代码中,您将将了解如何在特定类型的eflr中查找有关特定对象的信息。

fromdlispyimportLogicalFile,Object,Attribute,FrameData,PrivateEncryptedEFLR,parsefromdlispyimportOlrEFLR,FrameEFLRfromdlispyimportFrame,FrameData,Origin# you can also set eflrOnly as True to only load EFLRs_,logical_file_list=parse('../../data/206_05a-_3_DWL_DWL_WIRE_258276498.DLIS')forlfinlogical_file_list:# type:LogicalFileforeflrinlf.eflrList:iftype(eflr)isOlrEFLR:forobjineflr.objects:#type:Originprint("File {} created by company {} at {}".format(obj.getAttrValue(Origin.FILE_ID),obj.getAttrValue(Origin.COMPANY),obj.getAttrValue(Origin.CREATION_TIME)))iftype(eflr)isFrameEFLR:forobjineflr.objects:#type:Framechanel_names=', '.join(map(str,obj.getAttrValue(Frame.CHANNELS)))print("Frame {} with channel list {}".format(obj.name,chanel_names))

其他提示:

不同python版本的兼容性测试:

  • 安装工具:pip install tox pytest pyenv
  • 然后确保安装了Python3.5、3.6
  • tox

生成覆盖率报告:

py.test --cov-report html --cov=dlis_parser dlis_parser/tests/test_basic.py

生成文档:

  • 安装狮身人面像:brew install sphinx-doc
  • 删除文档文件夹中除index.rst以外的.rst旧文件
  • 重新生成.rst文件源代码: cd docs;sphinx-apidoc -o . ../dlis_parser ../dlis_parser/tests/*; cd ..
  • 生成HTML文档:cd docs;make clean html
  • 然后您可以在docs/_build/html目录中找到文档

许可证

这个项目是根据BSD-3-Clause

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

推荐PyPI第三方库


热门话题
java嵌套循环打印一个数字,旁边有相同数量的星号   java JodReports替代方案   java如何将模型类parcelable对象从片段传递到活动?   java JCS缓存删除功能不删除特定元素   如何打开。Java的dll文件。   java在这种情况下如何选择聚合根?   java从CellEditorListener获取编辑的TreeNode   Java到web服务和mysql   从openssl ec在Java中创建公钥时出现加密无效密钥异常   Java数组:添加多个数组的元素时忽略空数组   java在初始化后向fragment发送数据   JButtons的java数组正在返回void   若联接列不包含特定值,则java JPA条件生成器仅返回实体   java ActionBar问题:NPE   java Portlet是被广泛使用还是非常罕见?