#遇到问题的现象描述
使用pyside2写一段代码,任务是读一个segy文件并写到指定目录。构造了segyio要求的spec,也读取了相关的必要信息如samples,interval, tracecount等,并构建了一个local_f_data字典,包含了必须的关键字如text、bin等。程序执行时运行到要写segy文件时发生错误。没有执行打印语句: print('开始写文本头')
#问题相关代码片,运行结果,报错内容
相关代码片:
try:
# Create SEGY file with spec
with segyio.create(self.output_file, self.spec) as w:
print('开始写文本头')
w.text[0] = self.local_f_data['text'][0]
print('开始写二进制头')
for key, value in self.local_f_data['bin'].items():
w.bin[key] = value
......
try:
#read segy file
with segyio.open(filename, mode='r', ignore_geometry = False) as f:
# 读取必要的信息
text = f.text # 文本头部
tracecount = f.tracecount # 地震道数量
samples = f.samples # 样本数组
interval = f.bin[segyio.BinField.Interval]
dataformat = f.bin[segyio.BinField.Format]
#print(samples)
#header = list(f.header) # 地震道头部信息
trace = list(f.trace) # 地震道数据
print(f"Number of traces: {len(trace)}")
# 使用 f.ilines 和 f.xlines 提取 iline 和 xline
iline = f.ilines.tolist() # 转换为列表
xline = f.xlines.tolist() # 转换为列表
iline = np.array(iline)
xline = np.array(xline)
print("开始创建字典")
local_f_data = {
'text': text,
'bin':{
segyio.BinField.Samples: samples,
segyio.BinField.Traces: trace,
segyio.BinField.Interval: interval, # Sampling interval (milliseconds)
segyio.BinField.Format: dataformat
},
'tracecount': tracecount, #len(self.traces), 确保你在这里计算 trace 的数量
'iline': iline,
'xline': xline
# 'filehandle': filehandle
}
print("构建spec")
spec = segyio.spec()
spec.samples = samples # 样本点数量
spec.format = dataformat #已经修改为常量或枚举
spec.tracecount = tracecount # 确保 tracecount 是整数
spec.iline = np.unique(iline).astype(np.int32) if iline is not None else None
spec.xline = np.unique(xline).astype(np.int32) if xline is not None else None
# Create FileWriteThread instance
self.file_write_thread = FileWriteThread(output_file, local_f_data, spec)
运行结果如下:
===================== RESTART: D:\ML\mldata\plot_project\deeplearning\segy_loading.py =====================
MainWindow initialized
Application started
Save button clicked
Number of traces: 9911
开始创建字典
构建spec
Thread started
Attempting to open SEGY file: D:/ML/mldata/plot_project/deeplearning/output.sgy
Error while writing SEGY file: only length-1 arrays can be converted to Python scalars
Thread finished
错误信息:Error while writing SEGY file: only length-1 arrays can be converted to Python scalars
#我的初步解答思路是
在ChatGppt4o帮助下重点检查修改了local_f_data和spec,因为执行到写segy数据时发生错误,那推断这行语句没有执行with segyio.open(filename, mode='r', ignore_geometry = False) as f:
但经过修改后再运行还是不行,也找不出问题所在。请检查代码并给出修改的正确代码,谢谢!
#操作环境、软件版本等相关信息
win2011, python3.10, segyio1.9.12