Simple & fast IO for SEG-Y files
npx @tessl/cli install tessl/pypi-segyio@1.9.0A Python library for easy interaction with SEG-Y formatted seismic data files. Segyio provides a low-level C interface with Python bindings that offers fast, streaming-based file operations with numpy integration for efficient seismic data processing.
pip install segyioimport segyioCommon patterns for working with SEG-Y files:
import segyio
import numpy as npimport segyio
import numpy as np
# Open an existing SEG-Y file for reading
with segyio.open('seismic.sgy') as f:
# Get basic file information
print(f"Samples per trace: {len(f.samples)}")
print(f"Number of traces: {f.tracecount}")
print(f"Inline range: {f.ilines[0]} to {f.ilines[-1]}")
print(f"Crossline range: {f.xlines[0]} to {f.xlines[-1]}")
# Read a single trace
trace = f.trace[0]
# Read an inline
inline_data = f.iline[100]
# Read trace headers
headers = f.header[0:10]
# Create a new SEG-Y file
spec = segyio.spec()
spec.samples = np.arange(0, 1000, 4) # 0-1000ms, 4ms intervals
spec.ilines = range(1, 11) # Inlines 1-10
spec.xlines = range(1, 21) # Crosslines 1-20
with segyio.create('output.sgy', spec) as f:
# Write trace data
for i, trace_data in enumerate(synthetic_data):
f.trace[i] = trace_dataSegyio's architecture centers around streaming file operations and structured data access:
This design enables both low-level control for performance and high-level convenience for common seismic processing tasks.
Core functionality for opening existing SEG-Y files, creating new files, and managing file handles with proper resource management.
def open(filename, mode="r", iline=189, xline=193, strict=True, ignore_geometry=False, endian='big'):
"""Open a SEG-Y file for reading or writing."""
def create(filename, spec):
"""Create a new SEG-Y file with specified geometry."""
class SegyFile:
"""Main file handle for SEG-Y operations."""Access to binary header fields and trace header fields using meaningful enumeration constants instead of byte offsets.
class BinField:
"""Binary header field byte offset constants."""
class TraceField:
"""Trace header field byte offset constants."""
class SegySampleFormat:
"""Data sample format codes."""Multiple specialized interfaces for accessing seismic data organized by traces, inlines, crosslines, depth slices, and gathers.
# Access modes available on SegyFile instances
f.trace[i] # Individual traces
f.iline[il] # Inline slices
f.xline[xl] # Crossline slices
f.depth_slice[d] # Horizontal depth/time slices
f.gather[cdp] # Pre-stack gathersHelper functions for format conversion, metadata extraction, array-to-SEG-Y conversion, and common seismic processing operations.
def dt(f, fallback_dt=4000.0):
"""Infer sample rate from SEG-Y file."""
def cube(f):
"""Read full 3D cube into memory."""
def from_array(filename, data, **kwargs):
"""Create SEG-Y file from numpy array."""Seismic Unix field name aliases and specialized file handling for SU format compatibility.
import segyio.su
# Use SU field names instead of numeric constants
segyio.su.tracl # Trace sequence number within line
segyio.su.cdp # CDP ensemble number
segyio.su.offset # Source-receiver offset