我有CT扫描仪的CT协议CSV文件。
我想读取CT扫描的参数,并将数据转换到新的表格中进行比较。但是文件的结构不是列结构。我可以说它是一个字符串结构。
有前两个协议的例子:
成人头部1.1头部(成人)1.25
检查剂量设置,ExamCtdi,ExamDLP,
56.1357, 8211.25,系列1军头,仰卧位SeriesLevelCopy AutoStore,浇注,注射器,不,不,不,不
扫描,kV,妈,开始,结束,飞机,消息,光,计时器,1120年,20岁的S180 I180 0, 0,不,不,
系列2轴头,仰卧位AutoStore、浇注、SeriesLevelCopy SmartPrep,活检,注射器,不,不,不,不,不
Series 2 Group 1扫描设置集团、图像、速度、类型,开始,结束,厚,速度,行,Int,雇佣,航天飞机,倾斜,SFOV, kV,妈,消息,光,计时器,CTDINV、CTDI DLP NV、DLP、1161、1.0、螺旋、S150.0 I1300.0, 1.25, 5.625, 16日1.25,不,不,S0.0,大,120340年,不,不,不,NA, 56.1357, NA, 8211.25,
系列2组1侦察1设置集团、DFOV、A/P, R/L,过滤器,类型、变化,D3D, DMPR,神经,阿西尔,IQEnhance,助教,翻转,1、50.0 d, a0.0 d, r0.0 d、标准、完整,不,不,不,不,不,不,不,没有,
系列3组1侦察2设置集团、图像类型,开始,结束,厚,Int, DFOV, A/P, R/L,过滤器,类型,阿西尔,IQEnhanced,助教,翻转,1、1161、螺旋、S150.0 D、I1300.0 D、1.25、1.25、50.0 D、A0.0 D、R0.0D,标准,完整,没有,没有,没有,没有
Series 7 Group 1 Recon 6 Settings集团、图像类型,开始,结束,厚,Int, DFOV, A/P, R/L,过滤器,类型,阿西尔,IQEnhanced,助教,翻转,1、1161、螺旋、S150.0 D、I1300.0 D、1.25、1.25、50.0 D、A0.0 D、R0.0D,柔软,饱满,没有,是的,不,没有
Series 8 Group 1 Recon 7 Settings集团、图像类型,开始,结束,厚,Int, DFOV, A/P, R/L,过滤器,类型,阿西尔,IQEnhanced,助教,翻转,1、1161、螺旋、S150.0 D、I1300.0 D、1.25、1.25、50.0 D、A0.0 D、R0.0D,柔软,饱满,没有,是的,不,没有
成人头部1.2头部对比度(成人)1.25 N+C
检查剂量设置,ExamCtdi,ExamDLP,
110.533, 2351.6,系列1军头,仰卧位SeriesLevelCopy AutoStore,浇注,注射器,不,不,不,不
扫描,kV,妈,开始,结束,飞机,消息,光,计时器,1120年,20岁的S180 I180 0, 0,不,不,
系列2轴头,仰卧位AutoStore、浇注、SeriesLevelCopy SmartPrep,活检,注射器,不,不,不,不,不
Series 2 Group 1扫描设置集团、图像、速度、类型,开始,结束,厚,速度,行,Int,雇佣,航天飞机,倾斜,SFOV, kV,妈,消息,光,计时器,CTDINV、CTDI DLP NV、DLP、1161年1.0,螺旋,S150.0 I50.0, 1.25, 5.625, 16日1.25,不,不,S0.0,大,120340年,不,不,不,NA, 55.2667, NA, 1175.8,
系列2组1侦察1设置集团、DFOV、A/P, R/L,过滤器,类型、变化,D3D, DMPR,神经,阿西尔,IQEnhance,助教,翻转,1、50.0、A0.0 R0.0、标准、完整,不,不,不,不,不,不,不,没有,
系列3组1侦察2设置集团、图像类型,开始,结束,厚,Int, DFOV, A/P, R/L,过滤器,类型,阿西尔,IQEnhanced,助教,翻转,1,161,螺旋,S150.0 D,I50.0 D,1.25,1.25 D,50.0 D,A0.0 D,R0.0 D,Standard,Full,None,No,No,None
Series 7 Group 1 Recon 6 Settings集团、图像类型,开始,结束,厚,Int, DFOV, A/P, R/L,过滤器,类型,阿西尔,IQEnhanced,助教,翻转,1,161,螺旋,S150.0 D,I50.0 D,1.25,1.25 D,50.0 D,A0.0 D,R0.0 D,软,全,无,是,否,无
Series 8 Group 1 Recon 7 Settings集团、图像类型,开始,结束,厚,Int, DFOV, A/P, R/L,过滤器,类型,阿西尔,IQEnhanced,助教,翻转,1,161,螺旋,S150.0 D,I50.0 D,1.25,1.25 D,50.0 D,A0.0 D,R0.0 D,软,全,无,是,否,无
9系列、轴头,仰卧位AutoStore、浇注、SeriesLevelCopy SmartPrep,活检,注射器,不,不,不,不,不
Series 9 Group 1扫描设置集团、图像、速度、类型,开始,结束,厚,速度,行,Int,雇佣,航天飞机,倾斜,SFOV, kV,妈,消息,光,计时器,CTDINV、CTDI DLP NV、DLP、1161年1.0,螺旋,S150.0 I50.0, 1.25, 5.625, 16日1.25,不,不,S0.0,大,120340年,不,不,不,NA, 55.2667, NA, 1175.8,
Series 9 Group 1 Recon 1设置集团、DFOV、A/P, R/L,过滤器,类型、变化,D3D, DMPR,神经,阿西尔,IQEnhance,助教,翻转,1、50.0 D,A0.0 D,R0.0 D,软,全,No,No,No,None,Yes,No,None,
是否有一种方便的方法从具有这种结构的文件中读取数据?我的意思是,我不想一个字符串一个字符串地读取文件,用remodule写一些逻辑表达式等等。也许你有一些有用的建议,如果没有任何有用的库阅读。
确切地说不是一个表,但这将把您的csv转换为字典,然后您可以将其用于您的目的。(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"
},
...