打开数据文件的优雅方式,具体取决于其扩展名

时间:2014-08-12 11:16:20

标签: python

在我提供给我的脚本的文件夹中,文件可以有两个扩展,需要两种不同的方法来打开数据文件。我使用for循环到try并根据扩展名打开这些文件。下面提供了一个示例代码:

for idx in range(len(xa)):
  filename = folder + xa[idx]
  try:
    data = numpy.load(filename + ".extention1")
  except:
    try:
      data = pyfits.loadtxt(filename + ".extention2")
    except:
      sys.exit("\nrun_" + str(xa[idx]) + " is a wrong file!\nScript terminated\n")

代码完美无缺。但是,我想知道是否有更优雅/更短的方式来做到这一点?

1 个答案:

答案 0 :(得分:0)

我将它包装在一个函数中,并在字典中保存不同的处理函数和扩展:

def load_file(filename):
    """Attempts to load the file and return the data."""

    HANDLERS = {'.ext1': numpy.load,
                '.ext2': pyfits.loadtxt}

    for ext, func in HANDLERS.items():
        try:
            return func(filename + ext)
        except:
            pass
    else:
        raise IOError("'{0}' could not be loaded.".format(filename))

然后你的外环变成:

for file in xa: # iterate over 'xa' directly, rather than by 'idx'
    try:
        data = load_file(folder+file)
    except IOError:
        sys.exit(...)
    ...

如果确实需要idx,请使用enumerate

for idx, file in enumerate(xa):