gard_utils.py 文件源码

python
阅读 25 收藏 0 点赞 0 评论 0

项目:storylines 作者: jhamman 项目源码 文件源码
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
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号