在我提供给我的脚本的文件夹中,文件可以有两个扩展,需要两种不同的方法来打开数据文件。我使用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")
代码完美无缺。但是,我想知道是否有更优雅/更短的方式来做到这一点?
答案 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):