def filters(filter_directory=None, update=False, fmt='table', **kwargs):
    if filter_directory is None:
        filter_directory = resource_filename('svo_filters', 'data/filters/')
    p_path = os.path.join(filter_directory, 'filter_list.p')
    updated = False
    if not os.path.isfile(p_path):
        os.system('touch {}'.format(p_path))
    if update:
        print('Loading filters into table...')
        files = glob(filter_directory+'*')
        files = [f for f in files if not f.endswith('.p')]
        bands = [os.path.basename(b) for b in files]
        tables = []
        for band in bands:
            band = band.replace('.txt', '')
            filt = Filter(band, **kwargs)
            filt.Band = band
            info = filt.info(True)
            vals = [float(i) if i.replace('.', '').replace('-', '')
                    .replace('+', '').isnumeric() else i
                    for i in info['Values']]
            dtypes = np.array([type(i) for i in vals])
            table = at.Table(np.array([vals]), names=info['Attributes'],
                             dtype=dtypes)
            tables.append(table)
            del filt, info, table
        with open(p_path, 'wb') as file:
            pickle.dump(at.vstack(tables), file)
    data = {}
    if os.path.isfile(p_path):
        with open(p_path, 'rb') as file:
            data = pickle.load(file)
    if data:
        if fmt == 'dict':
            data = {r[0]: {k: r[k].value if hasattr(r[k], 'unit') else r[k]
                    for k in data.keys()[1:]} for r in data}
        else:
            data.add_index('Band')
        return data
    else:
        if not updated:
            updated = True
            filters(update=True)
        else:
            print('No filters found in', filter_directory)