Skip to content

从 CSV 导入并打开钻孔数据库

外部系统(如 Excel、地质数据库)导出 CSV 后,通过 SDK 转换为 Dimine 标准格式,保存为 .dmd 钻孔数据库,并自动在 Dimine 中打开。

前置条件

uv add pandas

Dimine 需已启动并开启 WebSocket 服务(默认 ws://localhost:8000)。

完整示例

import asyncio
import pandas as pd
from dimine_python_sdk.lib.io import DmdFile
from dimine_python_sdk.conn import open_client


async def import_and_open():
    # ------------------------------------------------------------------
    # 1. 从 CSV 导入并映射为中文标准列名
    # ------------------------------------------------------------------
    dmd = DmdFile()

    dmd.collar = pd.read_csv("raw_collar.csv").rename(columns={
        "HoleID": "工程号",
        "X": "横坐标",
        "Y": "纵坐标",
        "Z": "高程",
        "Depth": "总深度",
        "Line": "勘探线",
    })

    dmd.survey = pd.read_csv("raw_survey.csv").rename(columns={
        "HoleID": "工程号",
        "Depth": "测斜深度",
        "Azimuth": "方位角",
        "Dip": "倾角",
    })

    dmd.lithology = pd.read_csv("raw_lithology.csv").rename(columns={
        "HoleID": "工程号",
        "From": "起始",
        "To": "结束",
        "Rock": "岩性编号",
    })

    # 样品表可选;除标准列外可保留元素品位等非标准列
    dmd.sample = pd.read_csv("raw_sample.csv").rename(columns={
        "HoleID": "工程号",
        "SampleID": "样本编号",
        "From": "起始",
        "To": "结束",
        # CU、AU、AG 等元素品位列无需 rename,作为非标准列直接保留,
        # 写入 _sample.dmt 但不出现于 .dmd 映射
    })

    # ------------------------------------------------------------------
    # 2. 保存为 .dmd 钻孔数据库
    # ------------------------------------------------------------------
    dmd_path = "C:/Projects/Mine/钻孔数据.dmd"
    dmd.save(dmd_path)
    print(f"已保存: {dmd_path}")

    # ------------------------------------------------------------------
    # 3. 在 Dimine 中打开(需 Dimine 已启动 WebSocket 服务)
    # ------------------------------------------------------------------
    async with open_client() as client:
        file_info = await client.open_file(dmd_path)
        print(f"已在 Dimine 中打开: {file_info.name}, ID: {file_info.id}")


if __name__ == "__main__":
    asyncio.run(import_and_open())

导入扩展表

除四大核心表外,还可以将分层表、地质编录表等自定义数据作为扩展表导入:

import pandas as pd
from dimine_python_sdk.lib.io import DmdFile
from dimine_python_sdk.lib.native.models import NativeExtendTable

dmd = DmdFile()

# 设置核心表...
dmd.collar = pd.read_csv("raw_collar.csv").rename(columns={...})
dmd.survey = pd.read_csv("raw_survey.csv").rename(columns={...})
dmd.lithology = pd.read_csv("raw_lithology.csv").rename(columns={...})

# 方式一:使用 NativeExtendTable(推荐)
ext_df = pd.read_csv("raw_stratigraphy.csv").rename(columns={
    "HoleID": "工程号",
    "From": "起始",
    "To": "结束",
    "LayerName": "分层名称",
})

dmd.extend_tables = [
    NativeExtendTable(
        df=ext_df,
        dmt_filename="分层表.dmt",
        hole_id_column="工程号",
        from_column="起始",
        to_column="结束",
        display_title="分层表",
    ),
]

# 方式二:使用 dict(向后兼容)
dmd.extend_tables = [
    {
        "df": ext_df,
        "dmt_filename": "分层表.dmt",
        "hole_id_column": "工程号",
        "from_column": "起始",
        "to_column": "结束",
        "display_title": "分层表",
    },
]

# 保存(扩展表自动写入 _分层表.dmt 并在 .dmd 中记录引用)
dmd.save("C:/Projects/Mine/钻孔数据.dmd")

列名映射速查

外部 CSV 列名 中文标准列名 对应表
HoleID 工程号 孔口表 / 测斜表 / 岩性表
X 横坐标 孔口表
Y 纵坐标 孔口表
Z 高程 孔口表
Depth 总深度 / 测斜深度 孔口表 / 测斜表
Line 勘探线 孔口表
Azimuth 方位角 测斜表
Dip 倾角 测斜表
From 起始 岩性表 / 样品表
To 结束 岩性表 / 样品表
Rock 岩性编号 岩性表
  • 列名映射使用 pandas.DataFrame.rename(columns=...) 完成
  • DataFrame 列名必须包含标准列名映射规范中对应表的必选标准列
  • 元素品位等非标准列(如 CUAU)无需映射,直接保留即可 — 它们会写入 .dmt 子表但不出现于 .dmd 引用
  • .dmd 文件与 {stem}_collar.dmt / {stem}_survey.dmt / {stem}_lithology.dmt 等子表文件保存在同一目录下
  • 扩展表的 .dmt 文件名由 dmt_filename 参数指定(如 分层表.dmt),保存时写入同一目录