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) — 保存失败
参考链接
- API 参考:dmt_file
- DMD 钻孔数据库操作(DMD 内部使用 DMT 存储各表数据)