回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个将结果输出到.csv文件的程序</p>
<p>然而,结果的结构是一个接一个的文本</p>
<p><a href="https://i.stack.imgur.com/Q9nyc.png" rel="nofollow noreferrer">1</a>:<a href="https://i.stack.imgur.com/I85ph.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/I85ph.png" alt="Original output saved as a .csv file"/></a>
但是,我需要这种格式-</p>
<p><a href="https://i.stack.imgur.com/Q9nyc.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/Q9nyc.png" alt="Wanted output as a table with columns"/></a></p>
<p>我的代码片段-</p>
<pre><code>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 #
</code></pre>
<p><strong><em>更新</em></strong>-
我已经按照阿方索在回答中的建议进行了编辑——使用熊猫——得到了答案</p>
<pre><code>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")
</code></pre>
<p>我已经编辑了我的原始代码,以包含以最少的重新编码量工作得最好的解决方案</p>