使用Python gxpy模块在Geosoft中创建通道的代码正确性排查
Geosoft创建新通道代码问题排查
我想确认以下两段代码是否可用于在Geosoft中创建新通道。每次运行代码后,在Oasis Montaj中打开生成的GDB文件都看不到结果。注:第一段代码尝试关联CSV数据。
第一段代码
import numpy as np import pandas as pd import geosoft.gxapi as gxapi import geosoft.gxpy.gx as gx import geosoft.gxpy.gdb as gxdb import geosoft.gxpy.utility as gxu gx = gx.GXpy() f = open('BOW_FEON_Cosmic.csv','r') ch = f.readline().strip().split() npd = np.loadtxt(f,delimiter=',',dtype=float) Raltlc = np.loadtxt(f, delimiter= ',') gdb = gxdb.Geosoft_gdb.new('BOW_GDB_Cosmic.gdb') for line in gdb.list_lines(): npd,ch,fid = gdb.write_line('Raltlc') gxdb.Channel.new(gdb,'Raltlc',dtype=np.float)
第一段代码的问题
- CSV读取逻辑错误:调用
f.readline()读取表头后,第一次np.loadtxt(f)会读取文件剩余所有行,此时文件指针已到末尾,第二次np.loadtxt(f)会返回空数组,导致Raltlc无有效数据 - 循环无意义:新创建的GDB中没有任何测线,
gdb.list_lines()返回空,循环体完全不会执行 - API调用错误:
gdb.write_line参数格式不符合要求,该方法需要传入测线名称、数据数组等必要参数,当前写法无法写入数据 - 通道创建未执行:创建通道的代码放在循环内,循环不执行导致通道根本没被创建
第二段代码
gxc = gx.GXpy() def Cosmic_test(): gxdb.Geosoft_gdb.new("BOW_GDG_COSMIC.gdb", overwrite=True) gxdb.Channel.new("BOW_GDG_COSMIC.gdb","LineN")
第二段代码的问题
- API参数错误:
gxdb.Channel.new的第一个参数必须是Geosoft_gdb对象,而不是GDB文件路径 - 函数未调用:仅定义了
Cosmic_test函数但没有执行调用,代码逻辑完全没运行 - 结构缺失:Geosoft的通道需要依附于测线,直接创建通道而没有先创建测线结构,无法在Oasis Montaj中正常显示
修正后的示例代码
以下是可以正常创建测线、通道并写入CSV数据的示例:
import numpy as np import geosoft.gxpy.gx as gx import geosoft.gxpy.gdb as gxdb # 初始化GX环境 gx = gx.GXpy() # 读取CSV数据(假设第一行是列名,后续行是数据) data = np.loadtxt('BOW_FEON_Cosmic.csv', delimiter=',', skiprows=1, dtype=np.float) # 假设第一列是测线ID,第二列是Raltlc数据,可根据实际CSV结构调整 line_ids = data[:, 0].astype(int) raltlc_data = data[:, 1] # 创建新GDB,允许覆盖已有文件 gdb = gxdb.Geosoft_gdb.new('BOW_GDB_Cosmic.gdb', overwrite=True) # 创建目标通道 gxdb.Channel.new(gdb, 'Raltlc', dtype=np.float) # 写入测线和数据(示例为单条测线,多测线可按ID分组处理) with gdb.new_line('Line_001') as line: # 按通道名匹配数据写入 line.write_data({'Raltlc': raltlc_data}) # 显式关闭GDB gdb.close()
内容的提问来源于stack exchange,提问作者Oumar Aljabre
相关产品推荐
相关产品推荐

