我目前正在使用以下代码手动阅读200个dicom图像:
ds1 = dicom.read_file('1.dcm')
到目前为止,这已经奏效但我正在尝试通过使用此代码创建一个循环来读取文件来缩短和使用我的代码:
for filename in os.listdir(dirName):
dicom_file = os.path.join("/",dirName,filename)
exists = os.path.isfile(dicom_file)
print filename
ds = dicom.read_file(dicom_file)
此代码目前无效,我收到错误:
"raise InvalidDicomError("File is missing 'DICM' marker. "
dicom.errors.InvalidDicomError: File is missing 'DICM' marker. Use
force=True to force reading
有人可以告诉我哪里出错了吗?
答案 0 :(得分:3)
我认为这一行:
dicom_file = os.path.join("/",dirName,filename)
可能是个问题?它将加入所有三个以形成一个以'/'为根的路径。例如:
os.path.join("/","directory","file")
将为您提供“/ directory / file”(绝对路径),而:
os.path.join("directory","file")
会给你“目录/文件”(相对路径)
如果你知道你想要的所有文件都是“* .dcm” 你可以试试glob模块:
import glob
files_with_dcm = glob.glob("*.dcm")
这也适用于完整路径:
import glob
files_with_dcm = glob.glob("/full/path/to/files/*.dcm")
但是,os.listdir(dirName)将包含目录中的所有内容,包括其他目录,点文件和诸如此类
如果您在阅读之前使用“if exists:”,那么您的exists = os.path.isfile(dicom_file)行将过滤掉所有非文件。
如果你知道模式,我会推荐glob方法,否则:
if exists:
try:
ds = dicom.read_file(dicom_file)
except InvalidDicomError as exc:
print "something wrong with", dicom_file
如果你尝试/除了,if存在:有点多余,但不会伤害......
答案 1 :(得分:2)
尝试添加:
dicom_file = os.path.join("/",dirName,filename)
if not dicom_file.endswith('.dcm'):
continue