我正在尝试读取文件夹树中的一系列DICOM文件,我正在使用下面的代码来运行树,随时读取每个文件。问题是我正在获取肯定存在的文件的IOErrors,我已经检查了文件权限和其他SO线程,例如Python: IOError: [Errno 2] No such file or directory,但我还没有设法让它在没有这些IOErrors的情况下工作。有没有人有任何想法?
for root, dirs, files in os.walk(path):
for fname in files:
name = os.path.basename(os.path.abspath(fname))
if name.startswith('.') == True:
pass
else:
try:
plan=dicom.read_file(fname)
ds=dicom.read_file(fname, stop_before_pixels = True)
kVp = TagChecker([0x18,0x60]) #KVP
Target = TagChecker([0x18,0x1191]) #ANODE
Filter = TagChecker([0x18,0x7050]) #
write_results.writerow([Survey_Number, Patient_ID, View_Protocol, int(kVp), Target, Filter, Thickness, mAs_Exposure, LPad_Yes_No, autoorman, AECMode, AECDset, Patient_Age, Comment, Compression_Force])
#print(fname)
except IOError:
print "IOError: ", "//" + os.path.join(root, fname) + "//"
except InvalidDicomError:
# This exception line prints an error message to the command line, checks to see if an error log
# has been generated for this session, writes a new one if not and then writes the error to the log file
print "Invalid Dicom File: ", fname
答案 0 :(得分:2)
通常采用文件名的方法,如dicom.read_file(fname),将采用绝对文件名(或假设文件名相对于运行主python程序的目录,即cwd())。我可以建议您将此行放在第一个read_file()调用之前:
print "reading: %s" % os.path.abspath(fname)
然后你会看到你实际上想要阅读的文件名。我猜这不是你认为你正在寻找的文件(或机器人)。
为了解决您的问题..在您阅读之前加入目录和fname ......例如
full_fname = os.path.join(dir, fname)
dicom.read_file(full_fname)
换句话说,我认为您正在阅读具有相对路径的文件,并且您希望使用绝对路径。