def get_filelist(pattern, date_range=None, timevar='time', calendar=None):
'''given a glob pattern, return a list of files between daterange'''
files = glob.glob(pattern)
if date_range is not None:
date_range = pd.to_datetime(list(date_range)).values
sublist = []
for f in files:
try:
kwargs = dict(mask_and_scale=False, concat_characters=False,
decode_coords=False)
if calendar:
ds = xr.open_dataset(f, decode_cf=False,
decode_times=False, **kwargs)
if (('XTIME' in ds) and not
('calendar' not in ds['XTIME'].attrs)):
ds['XTIME'].attrs['calendar'] = calendar
elif 'calendar' not in ds[timevar].attrs:
ds[timevar].attrs['calendar'] = calendar
# else decode using callendar attribute in file
ds = xr.decode_cf(ds, decode_times=True, **kwargs)
else:
ds = xr.open_dataset(f, decode_cf=True, decode_times=True,
**kwargs)
except Exception as e:
warnings.warn('failed to open {}: {}'.format(f, e))
try:
ds[timevar] = ds['XTIME']
except KeyError:
pass
if CHECK_TIMEVARS:
try:
check_times(ds[timevar].values, f=f)
except ValueError as e:
warnings.warn(
'time check raised an error for file %s: %s' % (f, e))
start = ds[timevar].values[0]
end = ds[timevar].values[-1]
ds.close()
if (((start >= date_range[0]) and (start <= date_range[1])) or
((end >= date_range[0]) and (end <= date_range[1])) or
(start <= date_range[0]) and (end >= date_range[1])):
sublist.append(f)
files = sublist
files.sort()
return files
评论列表
文章目录