Skip to content

DMT 数据表文件

dimine_python_sdk.lib.io 提供 DmtFile 类用于读写 Dimine 数据表文件(.dmt)。DMT 文件在 Dimine 中用于存储结构化表格数据,API 将其映射为 pandas.DataFrame,支持加载、查询、修改、保存全流程操作。


一、加载与保存

从文件加载

from dimine_python_sdk.lib.io import DmtFile

dmt = DmtFile("data.dmt")
print(dmt.columns)       # ['工程号', '横坐标', '纵坐标', '高程']
print(dmt.record_count)  # 150
print(dmt.data.head())

保存到文件

dmt.save("output.dmt")  # 另存为新文件
dmt.save()              # 覆盖原文件

从 DataFrame 创建并保存

import pandas as pd
from dimine_python_sdk.lib.io import DmtFile

df = pd.DataFrame({
    "工程号": ["ZK001", "ZK002"],
    "横坐标": [100.0, 200.0],
    "纵坐标": [50.0, 80.0],
    "高程": [500.0, 520.0],
})
DmtFile(data=df).save("new.dmt")

上下文管理器

from dimine_python_sdk.lib.io import dmt_conn

with dmt_conn("data.dmt") as dmt:
    print(dmt.info)
    # 修改数据...
    dmt.save("output.dmt")

二、数据访问

基本属性

dmt.name          # "data" — 文件名(不含扩展名)
dmt.columns       # ["工程号", "横坐标", ...] — 字段名列表
dmt.shape         # (150, 4) — (行数, 列数)
dmt.record_count  # 150 — 记录行数
dmt.empty         # False — 是否为空
dmt.info          # 字典:file, name, columns, record_count, shape

获取 DataFrame

# 直接访问内部 DataFrame
df = dmt.data        # 返回内部 DataFrame 引用(修改会影响 dmt)

# 获取副本(安全)
df = dmt.to_dataframe()  # 返回独立副本

设置数据

import pandas as pd
dmt.data = pd.DataFrame({"新列A": [1, 2, 3], "新列B": [4, 5, 6]})

三、行操作

获取单行

# 按索引访问
row = dmt.get_record(0)      # {'工程号': 'ZK001', '横坐标': 100.0, ...}
row = dmt[0]                  # 等效

# 切片获取多行
rows = dmt[0:5]               # 返回前 5 行的字典列表

获取整列

x_coords = dmt["横坐标"]       # [100.0, 200.0, ...] — 整列数据列表

添加记录

new_index = dmt.add_record({"工程号": "ZK003", "横坐标": 300.0, "纵坐标": 100.0})
print(new_index)  # 新记录的索引

未指定的字段用 pd.NA 填充。

设置单元格值

dmt.set_value(index=0, field="高程", value=510.0)

遍历所有行

for row in dmt:
    print(row["工程号"], row["横坐标"])

四、检查字段存在性

"工程号" in dmt           # True
"不存在的字段" in dmt     # False

五、异常处理

from dimine_python_sdk.lib.io import DmtError, DmtLoadError, DmtSaveError

# 加载不存在的文件
try:
    dmt = DmtFile("not_exist.dmt")
except DmtLoadError as e:
    print(f"加载失败: {e}")

# 无数据保存
try:
    dmt = DmtFile()
    dmt.save("output.dmt")
except DmtSaveError as e:
    print(f"保存失败: {e}")

异常层次: - DmtError(RuntimeError) — 基类 - DmtLoadError(DmtError) — 加载失败 - DmtSaveError(DmtError) — 保存失败


参考链接