Python - 在文件夹树中运行时出现IOError

时间:2014-12-01 08:04:03

标签: python dicom ioerror

我正在尝试读取文件夹树中的一系列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

1 个答案:

答案 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)

换句话说,我认为您正在阅读具有相对路径的文件,并且您希望使用绝对路径。