如何使用pydicom获取DICOM实例的完整属性(标签)列表(含标签ID、VR、名称及值)
获取DICOM实例的完整属性列表(含标签、VR、名称和值)
我明白你想要用pydicom提取DICOM文件里所有属性的完整信息——包括标签ID、VR、官方名称和对应值,而且翻遍官方文档没找到直接的指引?别担心,pydicom其实提供了内置的遍历方法,咱们可以轻松实现你要的效果。
首先确认你的基础加载代码没问题
你现有的DICOM文件加载逻辑完全正确,接下来只需要补充遍历所有DICOM元素的代码即可。
完整实现代码
import pydicom from io import BytesIO # 你的现有DICOM文件加载逻辑 dicom_data = await client.download_dicom_file(image_id) data = pydicom.dcmread(BytesIO(dicom_data)) # 遍历并打印所有DICOM属性(含文件元信息和主数据集) print("=== 完整DICOM属性列表 ===") # 1. 处理文件元信息组(对应你示例中的(2,0)这类标签) for elem in data.file_meta.elements(): # 提取所需的四个核心字段 tag = elem.tag # 返回(组号, 元素号)的元组,比如(0x0002, 0x0000)即十进制的(2,0) vr = elem.VR name = elem.name value = elem.value # 严格按照你要的格式输出 print(f"Tag: {tag} VR: {vr} Name: {name} Value: {value}") # 2. 处理主数据集的所有属性 for elem in data.elements(): tag = elem.tag vr = elem.VR name = elem.name value = elem.value # 优化:避免二进制数据刷屏(比如像素数据这类大体积内容) if vr in ['OW', 'OB'] or isinstance(value, bytes): value = f"<二进制数据,长度: {len(value)}>" print(f"Tag: {tag} VR: {vr} Name: {name} Value: {value}")
关键细节说明
data.file_meta.elements():专门遍历文件元信息组的所有元素,也就是你示例中File Meta Information Group Length这类属于元数据的标签data.elements():遍历主数据集里的所有DICOM属性,比如患者基本信息、图像采集参数等- 每个
elem对象自带你需要的全部字段:elem.tag:返回标签的元组形式(十进制/十六进制会自动识别显示)elem.VR:标准DICOM的VR值表示elem.name:DICOM标准定义的官方属性名称elem.value:属性的实际值
进阶:将结果保存为可复用列表
如果需要把属性列表存入变量而非直接打印,可以收集成字典列表方便后续处理:
dicom_attr_list = [] # 收集元信息组属性 for elem in data.file_meta.elements(): dicom_attr_list.append({ "tag": str(elem.tag), "vr": elem.VR, "name": elem.name, "value": elem.value if elem.VR not in ['OW', 'OB'] else f"<二进制数据,长度: {len(elem.value)}>" }) # 收集主数据集属性 for elem in data.elements(): dicom_attr_list.append({ "tag": str(elem.tag), "vr": elem.VR, "name": elem.name, "value": elem.value if elem.VR not in ['OW', 'OB'] else f"<二进制数据,长度: {len(elem.value)}>" }) # 现在dicom_attr_list就是完整的属性列表,可用于存储、分析等后续操作
内容的提问来源于stack exchange,提问作者Fez Vrasta
相关产品推荐
相关产品推荐

