RuntimeError: unable to find sorting.Check iline, (189) and xline (193) in case you are sure the file is a 3D sorted volume
我的Python版本是3.8.5的,然后安装的segyio模块版本为1.6.4.4的。
在使用segyio.open()函数打开segy数据时(示例数据mysegydata.sgy点这里),会出现RuntimeError异常,示例代码如下:
import segyio
filename = r'mysegydata.sgy'
with segyio.open(filename) as f:
data=[f.trace[i] for i in range(len(f.trace))]
会报错:
RuntimeError: unable to find sorting.Check iline, (189) and xline (193) in case you are sure the file is a 3D sorted volume
上述异常产生的原因是segyio模块尝试以“strict mode”,即严格模式打开,而该模式假设打开的文件是已按规则排好序的3D数据体。因此打开的文件只是以任意次序顺序排列的数据道的集合时,就会失败。
解决方案
只需要在segyio.open()函数中传递strict=False
或者ignore_geometry=True
即可,二者的含义分别是允许/强制以非结构化模式打开。需要注意的是,这样做以后f.iline
及类似的属性特征将会关闭,查看该类属性时会报错。示例代码如下:
import segyio
filename = r'mysegydata.sgy'
with segyio.open(filename,strict = False) as f1:
data1=[f1.trace[i] for i in range(len(f1.trace))] #成功
with segyio.open(filename,ignore_geometry=True) as f2:
data2=[f2.trace[i] for i in range(len(f2.trace))] #成功
print(f1.iline,f2.iline) #产生ValueError异常
结果会报错:
ValueError: File opened in unstructured mode.
参考文献:
Schlumberger/segyio