#遇到问题的现象描述
任务是写segy数据到指定目录。首先读取segy中关键信息,然后构建存放关键参数如text、bin、iline、xline等的local_f_data字典文件,以及sepc文件。已经检查过关键参数符合要求,程序运行到写segy数据时报错。请检查代码段中错误并给予修改后的代码,谢谢!
#问题相关代码片,运行结果,报错内容
相关代码片段:
print("开始创建字典")
local_f_data = {
'text': text,
'bin':{
segyio.BinField.Samples: samples,
segyio.BinField.Interval: interval, # Sampling interval (milliseconds)
segyio.BinField.Format: dataformat
},
'tracecount': tracecount, #len(self.traces), 确保你在这里计算 trace 的数量
'iline': iline,
'xline': xline
}
print("构建spec")
spec = segyio.spec()
spec.samples = samples # 样本点数量,确保其为整数
#spec.samples = len(local_f_data['bin'][segyio.BinField.Samples]) # 确保这是一个整数
spec.format = dataformat #已经修改为常量或枚举
spec.tracecount = tracecount # 确保 tracecount 是整数
spec.interval = interval
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
...
print(f"Attempting to open SEGY file: {self.output_file}")
#print(self.local_f_data['text'])
#print(self.local_f_data['bin'])
print(self.spec.samples) #证实单个整数,751
print(self.spec.interval)#证实单个整数,4000
print(self.spec.format)#证实单个整数,1
print(self.spec.iline)#一维整数numpy数组
print(self.spec.xline)#一维整数numpy数组
print(self.spec.tracecount)#证实单个整数,9911
try:
# Create SEGY file with spec
with segyio.create(self.output_file, self.spec) as w:
print('开始写文本头') # 程序没有执行这行,说明错误发生在这行之前
text_data = self.local_f_data['text'][0].encode('utf-8')[:3200]
w.text[0] = text_data.ljust(3200, b' ') # 填充到 3200 字节
运行结果:
MainWindow initialized
Application started
Save button clicked
开始创建字典
bytearray(b'C 1 CLIENT COMPANY CREW NO.
C 2 LINE AREA MAP ID.
C 3 REEL NO. DAY-START OF REEL YEAR OBSERVER
C 4 INSTRUMENT: MFG MODEL SERIAL NO.
C 5 DATA TRACES/RECORD AUXILIARY TRACES/RECORD CDP FOLD
C 6 SAMPLE INTERVAL MS SAMPLES/TRACE BITS/IN BYTES/SAMP
LE C 7 RECORDING FORMAT FORMAT THIS REEL MEASUREMENT SYSTEM
C 8 SAMPLE CODE: FLOATING PT FIXED PT FIXED PT-GAIN CORR
ELATED C 9 GAIN TYPE: FIXED BINARY FLOATING POINT OTHER
C10 FILTERS: ALIAS HZ NOTCH HZ BAND HZ SLOPE
C11 SOURCE: TYPE NUMBER/POINT POINT INTERVAL
C12 PATTERN LENGTH WIDTH
C13 SWEEP: START HZ END HZ LENGTH MS CHANNEL NO. T
YPE C14 TAPER: START LENGTH MS END LENGTH MS TYPE
C15 SPREAD: OFFSET MAX DISTANCE GROUP INTERVAL
C16 GEOPHONES: PER GROUP SPACING FREQUENCY MFG MODEL
C17 PATTERN LENGTH WIDTH
C18 TRACES SORTED BY: RECORD CDP OTHER
C19 MAP PROJECTION ZONE ID COORDINATE UNITS
C20 BEGINNING SHOTPOINT (OBSERVER-S):
C21 ENDING SHOTPOINT (OBSERVER-S):
C22 DIRECTION OF LINE:
C23 COUNTY STATE SURVEY NO.
C24
C25
C26
C27
C28
C29
C30
C31
C32
C33
C34
C35
C36
C37
C38
C39
C40
{3221: 751, 3217: 4000, 3225: 1}
9911
[1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070]
构建spec
打印调试
751
9911
4000
1
检查samples是否为一整数
Spec Samples: 751
Type of Spec Samples: <class 'int'>
Thread started
Attempting to open SEGY file: D:/ML/mldata/plot_project/deeplearning/output.sgy
751
4000
1
[1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070]
9911
Error while writing SEGY file: len() of unsized object
Thread finished
报错信息:
Error while writing SEGY file: len() of unsized object