如何校验Python字典是否成功存储图像数据并正确返回内容
Python模块中TIFF数据存字典、校验、调用操作指南
现有代码的核心错误
你当前的字典赋值方向写反了,运行会直接报错:
- 现有代码中
thickness_tif = optional_dict["thickness_tif"]的逻辑是从空字典里读取键为thickness_tif的值,空字典不存在该键,会直接抛出KeyError - 正确的存值逻辑是把读取到的内容赋值给字典对应键:
optional_dict["thickness_tif"] = thickness_tif
另外布尔值判断不需要冗余写==True,直接写if showMaps:即可。
分场景存储TIFF数据
你现在用rb模式读取的是TIFF文件的原始二进制字节流,不是可直接做数值计算的数组数据,根据需求选对应读取方式:
- 如果只是需要缓存原始文件内容,后续要写回成.tif文件,用二进制读取方式即可,修正后代码:
optional_dict = {} if showMaps: tif_file_path = f"{outputdir}ROI-{NAME}-thickness_tif" with open(tif_file_path, 'rb') as f: thickness_tif_bytes = f.read() # 正确存入字典 optional_dict["thickness_tif_bytes"] = thickness_tif_bytes
- 如果需要拿到TIFF对应的数组数据做后续计算/处理,不要用原生open读取,用专业库加载为numpy数组:
import tifffile # 也可以用PIL.Image、rasterio等库读tiff optional_dict = {} if showMaps: tif_file_path = f"{outputdir}ROI-{NAME}-thickness_tif" thickness_tif_arr = tifffile.imread(tif_file_path) optional_dict["thickness_tif_arr"] = thickness_tif_arr
验证存储是否生效
存值完成后可以通过两步校验:
- 校验键是否存在:执行
"thickness_tif_bytes" in optional_dict(对应存数组就换对应的键名),返回True说明键已成功写入字典 - 校验值合法性:
- 存二进制的场景:打印值类型和长度,
print(type(optional_dict["thickness_tif_bytes"]), len(optional_dict["thickness_tif_bytes"])),如果返回类型是bytes、长度和原TIFF文件大小一致,说明内容存储正确 - 存数组的场景:打印数组的形状和数据类型,
print(optional_dict["thickness_tif_arr"].shape, optional_dict["thickness_tif_arr"].dtype),输出和你预期的TIFF尺寸、数据类型匹配即存储正确
- 存二进制的场景:打印值类型和长度,
返回与调用字典数据
- 只要
optional_dict是当前函数作用域内定义的变量,在函数末尾直接写return optional_dict即可返回所有存储的内容,不管是字节流还是numpy数组都可以正常返回,不需要额外处理 - 外部调用函数拿到返回的字典后,直接按键取值即可使用:
# 调用你的函数拿到返回结果 func_result = your_custom_function(传入对应参数) # 取二进制字节流 if "thickness_tif_bytes" in func_result: tif_content = func_result["thickness_tif_bytes"] # 测试:把字节流写入新文件,能正常打开说明存储传输正常 with open("verify_output.tif", "wb") as f: f.write(tif_content) # 取numpy数组 if "thickness_tif_arr" in func_result: tif_array = func_result["thickness_tif_arr"] # 直接做数值计算、可视化等操作 print(tif_array.max(), tif_array.min())
内容的提问来源于stack exchange,提问作者user13826158
相关产品推荐
相关产品推荐

