我有CT扫描仪CT协议的CSV文件。
我想阅读CT扫描的参数,并将数据转换到一个新的表格中进行比较。但是文件的结构不是列结构。我可以说它是一个字符串结构。
以下是前两项协议的例子:
成人头部1.1头(成人) 1.25
考试剂量设置,ExamCtdi,ExamDLP,56.1357,8211.25
系列1,童子军,HeadFirst,仰卧AutoStore,门控,SeriesLevelCopy,注射器,不,不
扫描,kV,mA,开始,结束,平面,消息,光,定时器,1,120,20,S180,I180,0,0,不,不
系列2,轴向,HeadFirst,仰卧AutoStore,门控,SeriesLevelCopy,SmartPrep,活检,注射器,不
系列2 1扫描设置组,图像、速度、类型、开始、结束、粗、速、行、Int、HiRes、梭、Tilt、SFOV、kV、mA、消息、光、定时器、CTDI、CTDI、DLP、DLP、1,1161、1.0、Helical、S150.0、I130.01.25、1.25、5.625、1.25、No、S0.0、大型、120 340、No、NA、56.1357、NA、8211.25
系列2第1组雷管1设置组,DFOV,A/P,R/L,过滤器,类型,Vari,D3D,DMPR,Neuro,ASIR,IQEnhance,GSI,Flip,1,50.0 D,A0.0 D,R0.0 D,标准,完整,不,无,不,不,没有,
系列3第1组Recon 2设置组、图像、类型、开始、结束、厚度、Int、DFOV、A/P、R/L、过滤器、类型、ASIR、IQEnhanced、GSI、Flip、1,1161、Helical、S150.0 D、I1300.0 D、1.25、1.25、50.0 D、A0.0 D、R0.0 D、标准、完整、无、No、No、无
系列7第1组Recon 6设置组,图像、类型、开始、结束、厚度、Int、DFOV、A/P、R/L、过滤器、类型、ASIR、IQEnhanced、GSI、Flip、1 1161、Helical、S150.0 D、I1300.0 D、1.25、1.25、50.0 D、A0.0 D、R0.0 D、软、满、无、是、不、无
系列8组1 Recon 7设置组,图像、类型、开始、结束、粗、Int、DFOV、A/P、R/L、过滤器、类型、ASIR、IQEnhanced、GSI、Flip、1 1161、Helical、S150.0 D、I1300.0 D、1.25、1.25、50.0 D、A0.0 D、R0.0 D、软、满、无、是、不、无
成人头1.2头部对比(成人) 1.25 N+C
考试剂量设置,ExamCtdi,ExamDLP,110.533,2351.6
系列1,童子军,HeadFirst,仰卧AutoStore,门控,SeriesLevelCopy,注射器,不,不
扫描,kV,mA,开始,结束,平面,消息,光,定时器,1,120,20,S180,I180,0,0,不,不
系列2,轴向,HeadFirst,仰卧AutoStore,门控,SeriesLevelCopy,SmartPrep,活检,注射器,不
系列2 1扫描设置组,图像、速度、类型、开始、结束、粗、速、行、Int、HiRes、梭、Tilt、SFOV、kV、mA、消息、光、定时器、CTDI、CTDI、DLP NV、DLP、1 161、1.0、Helical、S150.0、I50、1.25、5.625、16、1.25、No、No、S0.0、大型、120、340、No、NA、55.2667、NA、1175.8
系列2第1组雷管1设置组,DFOV,A/P,R/L,过滤器,类型,Vari,D3D,DMPR,Neuro,ASIR,IQEnhance,GSI,Flip,1,50.0,A0.0,R0.0,标准,完全,无,无,不,无
系列3第1组Recon 2设置组,图像,类型,开始,结束,厚,Int,DFOV,A/P,R/L,过滤器,类型,ASIR,IQEnhanced,GSI,Flip,1,161,Helical,S150.0 D,I50.0 D ,1.25,1.25 D ,50.0 D,A0.0 D,R0.0 D,完全,无,No,No,无
系列7第1组Recon 6设置组,图像、类型、开始、结束、粗大、Int、DFOV、A/P、R/L、过滤器、类型、ASIR、IQEnhanced、GSI、Flip、1 161、Helical、S150.0 D、I50.0 D、1.25、1.25 D、50.0 D、A0.0 D、R0.0 D、软、满、无、是、否、无
系列8组1 Recon 7设置组,图像、类型、开始、结束、粗、Int、DFOV、A/P、R/L、过滤器、类型、ASIR、IQEnhanced、GSI、Flip、1 161、Helical、S150.0 D、I50.0 D、1.25、1.25 D、50.0 D、A0.0 D、R0.0 D、软、满、无、是、否、无
系列9,轴向,HeadFirst,仰卧AutoStore,门控,SeriesLevelCopy,SmartPrep,活检,注射器,不
系列9扫描设置组,图像、速度、类型、开始、结束、粗、速、行、Int、HiRes、梭、Tilt、SFOV、kV、mA、消息、光、定时器、CTDI、CTDI、DLP NV、DLP、1 161、1.0、Helical、S150.0、I50、1.25、5.625、16、1.25、No、No、S0.0、大、120、340、No、NA、55.2667、NA、1175.8
系列9第1组雷管1设置组、DFOV、A/P、R/L、过滤器、类型、Vari、D3D、DMPR、Neuro、ASIR、IQEnhance、GSI、Flip、1,50.0 D、A0.0 D、R0.0 D、软、满、不、零、是、不、零,
是否有一种方便的方法从具有这种结构的文件中读取数据?我的意思是,我不想通过字符串读取文件字符串,使用re模块编写一些逻辑表达式,等等。也许你有一些有用的建议来阅读,如果没有任何usfeul。
发布于 2022-04-21 14:19:34
不是一个确切的表,但这将把您的csv转换成一个dict,然后您就可以将其用于您的目的。( json导入只是为了打印格式,可以排除。)
import json
def read_scan():
file = open('scan.csv', 'r')
data = {}
key = ""
for line in file:
line = line.replace("\n", "")
if "," not in line and len(line):
key = line
if key not in data:
data[key] = []
elif len(line):
line_array = line.split(",")
line_data = {}
half = int(len(line_array) / 2)
for index in range(0, half):
line_data[line_array[index].strip()] = line_array[half + index]
data[key].append(line_data)
print(json.dumps(data, indent=4))
read_scan()输出:
{
"ADULT HEAD 1.1 Head (adult) 1.25": [
{
"Exam Dose Settings": " 56.1357",
"ExamCtdi": "8211.25",
"ExamDLP": ""
},
{
"Exam Dose Settings": " 56.1357",
"ExamCtdi": "8211.25",
"ExamDLP": ""
},
{
"Exam Dose Settings": " 56.1357",
"ExamCtdi": "8211.25",
"ExamDLP": ""
},
{
"Series 1": "SeriesLevelCopy",
"Scout": "Injector",
"HeadFirst": " No",
"Supine AutoStore": "No",
"Gating": "No"
},
{
"Series 1": "SeriesLevelCopy",
"Scout": "Injector",
"HeadFirst": " No",
"Supine AutoStore": "No",
"Gating": "No"
},
{
"Series 1": "SeriesLevelCopy",
"Scout": "Injector",
"HeadFirst": " No",
"Supine AutoStore": "No",
"Gating": "No"
},
{
"Series 1": "SeriesLevelCopy",
"Scout": "Injector",
"HeadFirst": " No",
"Supine AutoStore": "No",
"Gating": "No"
},
{
"Series 1": "SeriesLevelCopy",
"Scout": "Injector",
"HeadFirst": " No",
"Supine AutoStore": "No",
"Gating": "No"
},
...https://stackoverflow.com/questions/71955594
复制相似问题