<p>由于我自己是初学者,找到子方向的答案已经发布了,我想指出其他的代码建议。在</p>
<p>首先,我建议您将信息收集过程放入一个可读性和可重用性的方法中,如下所示:</p>
<pre><code>def collect_info(filename):
ds = dicom.read_file(filename)
if ds.SeriesDescription not in Series:
info = {}
info['PatientName']=ds.PatientName
info['SeriesDescription']=ds.SeriesDescription
Series.append(ds.SeriesDescription)
getRepetitionTime(ds)
getEchoTime(ds)
getInversionTime(ds)
getNumberOfAverages(ds)
getSpacingBetweenSlices(ds)
getPercentSampling(ds)
getPercentPhaseFieldOfView(ds)
getAcquisitionMatrix(ds)
getFlipAngle(ds)
getImagesInAcquisition(ds)
getPixelSpacing(ds)
f.write(info['PatientName'])
f.write("\t")
f.write(info['SeriesDescription'])
f.write("\t")
f.write(info['RepetitionTime'])
f.write("\t")
f.write(info['EchoTime'])
f.write("\t")
f.write(info['InversionTime'])
f.write("\t")
f.write(info['NumberOfAverages'])
f.write("\t")
f.write(info['SpacingBetweenSlices'])
f.write("\t")
f.write(info['PercentSampling'])
f.write("\t")
f.write(info['PercentPhaseFieldOfView'])
f.write("\t")
f.write(info['AcquisitionMatrix'])
f.write("\t")
f.write(info['FlipAngle'])
f.write("\t")
f.write(info['ImagesInAcquisition'])
f.write("\t")
f.write(info['PixelSpacing'])
f.write("\n")
f.close()
</code></pre>
<p>第二,这个程序还能用吗?如果我是正确的,您<strong>只打开f一次</strong>,并且每次收集信息时都将其关闭</strong>。你必须把f.close命令移到程序的末尾,在for循环之外。
现在你的程序应该是这样的:</p>
^{pr2}$
<p>第三,您可以通过编写以下内容来缩短代码:</p>
<pre><code>f.write(info['EchoTime'] + '\t')
</code></pre>
<p>而不是</p>
<pre><code>f.write(info['EchoTime'])
f.write('\t')
</code></pre>
<p>请记住,无论代码或语言是什么,bug/LOC比率都是恒定不变的,所以保持简短。而且,长代码很难导航。在</p>
<p>第四,可以将所有的getter放入一个返回信息元组的<strong>getinfo</strong>方法中。然后你就可以:</p>
<pre><code>for token in get_info():
f.write(token + '\t')
</code></pre>