Install
$ agentstack add skill-steadfastasart-geoscience-skills-dlisio ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
dlisio - DLIS/LIS File Reader
Quick Reference
import dlisio
# Open DLIS file (returns generator of logical files)
with dlisio.dlis.load('well.dlis') as (f, *rest):
frame = f.frames[0]
curves = frame.curves()
# Access by channel name
depth = curves['DEPTH']
gr = curves['GR']
# File metadata
for origin in f.origins:
print(origin.well_name, origin.field_name)
Key Classes
| Class | Purpose | |-------|---------| | PhysicalFile | Container returned by dlis.load() | | LogicalFile | Independent dataset within physical file | | Frame | Group of channels with common sampling | | Channel | Individual log curve with metadata | | Origin | Well and file metadata |
Essential Operations
Read Curves to DataFrame
import pandas as pd
with dlisio.dlis.load('well.dlis') as (f, *_):
frame = f.frames[0]
curves = frame.curves()
df = pd.DataFrame(curves)
df.set_index('DEPTH', inplace=True)
Access Channel and Origin Metadata
with dlisio.dlis.load('well.dlis') as (f, *_):
# Origin metadata
for origin in f.origins:
print(f"Well: {origin.well_name}, Field: {origin.field_name}")
# Channel properties
for ch in f.frames[0].channels:
print(f"{ch.name}: {ch.units}, dim={ch.dimension}")
Find Channels Across Frames
with dlisio.dlis.load('well.dlis') as (f, *_):
# By exact name or regex
channels = f.find('CHANNEL', '.*GR.*', regex=True)
# Find frame containing specific channel
for frame in f.frames:
if 'GR' in [ch.name for ch in frame.channels]:
curves = frame.curves()
break
Handle Array Channels
with dlisio.dlis.load('well.dlis') as (f, *_):
curves = f.frames[0].curves()
for name, data in curves.items():
if data.ndim > 1:
print(f"{name}: shape = {data.shape}") # Image/waveform
Common Object Types
| Object Type | Description | |-------------|-------------| | ORIGIN | File/well metadata | | FRAME | Channel grouping with index | | CHANNEL | Log curve definition | | TOOL | Logging tool info | | PARAMETER | Constants and settings |
Common Curve Names
| Curve | Description | |-------|-------------| | DEPT, DEPTH, TDEP | Depth curves | | GR | Gamma ray | | NPHI | Neutron porosity | | RHOB | Bulk density | | DT, DTC | Compressional slowness | | RT, ILD | Resistivity |
Error Handling
dlisio.dlis.set_encodings(['utf-8', 'latin-1'])
try:
with dlisio.dlis.load('file.dlis') as files:
for f in files:
curves = f.frames[0].curves()
except Exception as e:
print(f"Error: {e}")
DLIS vs LAS Comparison
| Feature | DLIS | LAS | |---------|------|-----| | Format | Binary | ASCII | | Multi-frame | Yes | No | | Array data | Yes | Limited | | Metadata | Rich | Basic |
When to Use vs Alternatives
| Tool | Best For | |------|----------| | dlisio | Reading DLIS/RP66 binary files, multi-frame data, image logs | | lasio | LAS (ASCII) well log files, simpler format, widely supported | | welly | Higher-level well data management, curve processing, projects |
Use dlisio when your data is in DLIS (RP66) format. DLIS files are common from modern logging tools and contain multi-frame, array, and image data that LAS cannot represent.
Use lasio instead when your data is in LAS format. LAS is ASCII-based, simpler, and more widely supported. Convert DLIS to LAS when downstream tools require it.
Use welly instead when you need well-level data management with curve processing, formation tops, and multi-well projects after initial file loading.
Common Workflows
Read and convert DLIS to DataFrame
- [ ] Load file with `dlisio.dlis.load()`, handle encoding if needed
- [ ] List logical files and frames to understand file structure
- [ ] Inspect channels: names, units, dimensions per frame
- [ ] Extract curves from target frame with `frame.curves()`
- [ ] Handle array/image channels separately (ndim > 1)
- [ ] Convert scalar curves to DataFrame with `pd.DataFrame(curves)`
- [ ] Export to CSV or convert to LAS format
References
- [DLIS File Structure](references/dlis_structure.md) - RP66 format specification
- [Frames and Channels](references/frame_channels.md) - Working with frames and channels
Scripts
- [scripts/dlistolas.py](scripts/dlistolas.py) - Convert DLIS to LAS format
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: SteadfastAsArt
- Source: SteadfastAsArt/geoscience-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.