我有一个将结果输出到.csv文件的程序
然而,结果的结构是一个接一个的文本
1: 但是,我需要这种格式-
我的代码片段-
PathDicom = "./Images/cases/TCGA-G3-A3CK/01-03-2005-CT CHEST ABDOMEN PELVIS ENHANCED-BODY-48980/"
ListFold = []; # Create an empty list for folder names
# Make a list of series names (i.e. Folder names) - ListFold
for dirName, subdirList, fileList in os.walk(PathDicom):
for filename in subdirList:
ListFold.append(os.path.join(dirName,filename))
lstFilesDCM = [] # create an empty list
with open ('results_NOISE_duke_new.csv','a+') as f:
for dirName, subdirList, fileList in os.walk(ListFold[0]):
CTSeriesPath = ListFold[0]
print("Exam_name:", PathDicom, file=f)
IQ = CTPatientImageNoise(CTSeriesPath)
ct_series_noise = {}
ct_series_noise['Noise'] = IQ.forDatabase['AverageGlobalNoiseIndex']
print("Series_name:",CTSeriesPath, file=f) # This is the series name
print("Series_Noise_value:", ct_series_noise['Noise'], file=f)
for filename in fileList:
lstFilesDCM.append(os.path.join(dirName,filename))
RefDs = pydicom.dcmread(lstFilesDCM[0])
#print("Exam_name:", PathDicom, file=f)
print("Manufacturer:", RefDs.Manufacturer, file=f)
print("iMAGE tYPE:", RefDs.ImageType, file=f)
print("Slice Thickness:", RefDs.SliceThickness, file=f)
print("Filter Type:", RefDs.FilterType, file=f)
#print("Convolution Kernel:", RefDs.ConvolutionKernel, file=f)
print("AccessionNumber:", RefDs.AccessionNumber, file=f)
print("StudyDescription:", RefDs.StudyDescription, file=f)
f.write('\n')
break #
更新- 我已经按照阿方索在回答中的建议进行了编辑——使用熊猫——得到了答案
import matplotlib.pyplot as plt
import numpy as np
import sys
import pydicom # Importing DICOM package
import csv
import os,string
import pandas as pd
from pyctpatientimagenoise import CTPatientImageNoise
PathDicom = "F:/PythonExample/Images/testduke/TCGA-DD-A11C/05-27-1999-Abdomen120LiverBiPhase Adult-61415"
Examname = []
ImageType=[]
Manufacturer = []
Series_name = []
Series_Noise =[]
Slice_thickness = []
Filter_type = []
Accessnum = []
StudyDesc = []
CTSeriesPath = []
# This is a list of all the series (organised as Folders) in the exam
ListFold = []; # Create an empty list for folder names
# Make a list of series names (i.e. Folder names) - ListFold
for dirName, subdirList, fileList in os.walk(PathDicom):
for filename in subdirList:
ListFold.append(os.path.join(dirName,filename))
lstFilesDCM = [] # create an empty list
for dirName, subdirList, fileList in os.walk(ListFold[0]):
CTSeriesPath = ListFold[0]
Examname.append(PathDicom)
IQ = CTPatientImageNoise(CTSeriesPath)
ct_series_noise = {}
ct_series_noise['Noise'] = IQ.forDatabase['AverageGlobalNoiseIndex']
Series_name.append(CTSeriesPath) # This is the series name
Series_Noise.append(ct_series_noise['Noise'])
for filename in fileList:
lstFilesDCM.append(os.path.join(dirName,filename))
# Get 1ST SLICE INFO
RefDs = pydicom.dcmread(lstFilesDCM[0])
#print("Exam_name:", PathDicom, file=f)
Manufacturer.append(RefDs.Manufacturer)
ImageType.append(RefDs.ImageType)
Slice_thickness.append(RefDs.SliceThickness)
Filter_type.append(RefDs.FilterType)
#print("Convolution Kernel:", RefDs.ConvolutionKernel, file=f)
Accessnum.append(RefDs.AccessionNumber)
StudyDesc.append(RefDs.StudyDescription)
#print("Irradiation Event UID:", RefDs.IrradiationEventUID, file=f)
break
for dirName, subdirList, fileList in os.walk(ListFold[1]):
CTSeriesPath = ListFold[1]
Examname.append(PathDicom)
IQ = CTPatientImageNoise(CTSeriesPath)
ct_series_noise = {}
ct_series_noise['Noise'] = IQ.forDatabase['AverageGlobalNoiseIndex']
Series_name.append(CTSeriesPath) # This is the series name
Series_Noise.append(ct_series_noise['Noise'])
for filename in fileList:
lstFilesDCM.append(os.path.join(dirName,filename))
# Get 1ST SLICE INFO
RefDs = pydicom.dcmread(lstFilesDCM[1])
#print("Exam_name:", PathDicom, file=f)
Manufacturer.append(RefDs.Manufacturer)
ImageType.append(RefDs.ImageType)
Slice_thickness.append(RefDs.SliceThickness)
Filter_type.append(RefDs.FilterType)
#print("Convolution Kernel:", RefDs.ConvolutionKernel, file=f)
Accessnum.append(RefDs.AccessionNumber)
StudyDesc.append(RefDs.StudyDescription)
#print("Irradiation Event UID:", RefDs.IrradiationEventUID, file=f)
break
df = pd.DataFrame(list(zip(Examname, Manufacturer, ImageType, Series_name,Series_Noise,Slice_thickness,Filter_type,Accessnum,StudyDesc )), columns =["Exam","Manufacturer", "iMAGE tYPE", "Series", "Noise", "Slice Thickness", "Filter Type", "Accession Num", "Study Desc"])
df.to_csv("F:/PythonExample/testdel.csv")
我已经编辑了我的原始代码,以包含以最少的重新编码量工作得最好的解决方案
我们无法复制你的结果。将代码减少到最少的示例,或者使用调试器跟踪逻辑错误的位置。以下是一个基于您的更新的示例:
另见:https://ericlippert.com/2014/03/05/how-to-debug-small-programs/
使用pandas制作数据帧,然后将其保存到csv,怎么样
没有minimal reproducible example很难给出完整的答案,但我会尝试
首先,为每个所需列创建一个列表
然后,在for循环中,将
print
语句替换为append
最后,创建一个带有熊猫的数据帧More info here
并将其保存到csvInfo here
相关问题 更多 >
编程相关推荐