一个解析DLIS文件的python库
项目描述
介绍
DLIS 文件解析器(数字测井交换标准),测井数据的二进制格式,由RP66 版本 1描述
范围
此解析器可以处理 RP66 版本 1 的可见包络和逻辑格式,这意味着只要它是最终位于计算机/服务器上的 DLIS 文件,此解析器应该能够读取和解析它。但是,它是在磁盘磁带中,这个解析器将无法解析它。标准中定义的大多数格式已被覆盖,例如
- 单个 DLIS 文件中的逻辑文件和多个逻辑文件
- EFLR(公共 EFLR 和私有 EFLR)和 IFLR(FData、EoF 和 NOFORM IFLR)
- 多维FData
- 此解析器对加密的 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-NAME
和DESCRIPTION
- 一个 json 文件,代表逻辑文件中的所有 EFLR
- 一组 CSV 文件,每个文件代表一帧的所有 FData。注意:通道的值可以是单个整数、浮点整数列表或多维体积。解析总是将高维 volumen 压缩到 1 维列表,例如维度为 [320, 6] 的通道值将被压缩到长度为 1920 (320x6) 的列表。得到这样的列表后,您可以回顾 csv 文件以找出维度并恢复到其高维度表示。
如何解析dlis文件并遍历逻辑记录:
from dlispy import LogicalFile, 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)
for lf in logical_file_list: # type:LogicalFile
print("LogicalFile with ID:{}, SequenceNumber:{}".format(lf.id, lf.seqNum))
for eflr in lf.eflrList:
if type(eflr) is PrivateEncryptedEFLR: # PrivateEncryptedEFLR needs to handle separately.
continue
print(" Set with Type:{}, Name:{}".format(eflr.setType, eflr.setName))
for obj in eflr.objects: # type:Object
print(" Object with Name:{}".format(obj.name))
for attribute in obj.attributes: #type:Attribute
print(" Attribute with Label:{}, Value:{}, Count:{}, RepCode:{}, Units:{} ".
format(attribute.label, ' '.join(map(str, attribute.value))
if type(attribute.value) is list else attribute.value,
attribute.count, attribute.repCode, attribute.units))
for frameName, fDataList in lf.frameDataDict.items():
print(" Frame:{}".format(frameName))
for fdata in fDataList: # type:FrameData
print(" FrameData with FrameNumber:{} and {} of slots".
format(fdata.frameNumber, len(fdata.slots)))
如何将 dlis 文件转储为可读格式
在此示例代码中,您可以看到如何将 dlis 文件转储为读取格式,包括。由于每个 dlis 文件可以包含一个或多个逻辑文件,因此逻辑记录跨逻辑文件之间没有依赖关系,因此这意味着单独处理每个逻辑文件,因此我们在给定的输出路径中为每个逻辑文件创建单独的文件夹,我们id
使用逻辑文件作为文件夹名称。在每个文件夹中,有以下内容:
- 一个 json 文件,其中包含此逻辑文件中的所有 EFLR(公共和私有 oens)
- 一组 csv 文件,每个文件代表一个帧。文件的命名约定是
<origin of ObjectName>_<copy of ObjectName>_<identifier of ObjectName>.csv
. 在 csv 文件中,每一列代表一个通道,每一行代表一个 FrameData。对于高维通道,该值被压缩为一维数组,用户可以使用 json 文件中的通道维度属性将其转换回来。 - 一个名为 的文件夹
UnformattedDataLogicalRecords
,所有的Unformatted Data LogicalRecords
都以二进制格式存储在这个文件夹中。
from dlispy import dump
# you can also set eflrOnly as True to only dump the EFLRs as json file load EFLRs
dump('../data/206_05a-_3_DWL_DWL_WIRE_258276498.DLIS', output_path='output', eflr_only= False)
提前使用
在此示例代码中,您将看到如何在特定类型的 EFLR 中查找有关特定对象的信息。
from dlispy import LogicalFile, Object, Attribute, FrameData, PrivateEncryptedEFLR, parse
from dlispy import OlrEFLR, FrameEFLR
from dlispy import Frame, 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')
for lf in logical_file_list: # type:LogicalFile
for eflr in lf.eflrList:
if type(eflr) is OlrEFLR:
for obj in eflr.objects: #type:Origin
print("File {} created by company {} at {}".format(
obj.getAttrValue(Origin.FILE_ID),obj.getAttrValue(Origin.COMPANY),obj.getAttrValue(Origin.CREATION_TIME)))
if type(eflr) is FrameEFLR:
for obj in eflr.objects: #type:Frame
chanel_names = ', '.join(map(str, obj.getAttrValue(Frame.CHANNELS)))
print("Frame {} with channel list {}".format(obj.name, chanel_names))
附加提示:
不同Python版本的兼容性测试:
- 安装工具:
pip install tox pytest pyenv
- 然后确保您安装了 python 3.5、3.6
tox
生成覆盖率报告:
py.test --cov-report html --cov=dlis_parser dlis_parser/tests/test_basic.py
生成文档:
- 安装狮身人面像:
brew install sphinx-doc
- 删除
.rst
除index.rst
docs 文件夹中的旧文件 - 重新生成
.rst
文件源代码:cd docs;sphinx-apidoc -o . ../dlis_parser ../dlis_parser/tests/*; cd ..
- 生成 HTML 文档:
cd docs;make clean html
docs/_build/html
然后你可以在目录中找到文档
执照
该项目在BSD-3-Clause下获得许可
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。