Okay, think this is more or less ready to go.
Stylistically I'm really not a fan of the if/else chain I've used to implement this, but I think it's going to be a bit of a pain to implement it 'more properly' - I'll open a separate PR doing so.
Originally posted by @charles-turner-1 in #728 (comment)
TLDR; the CatalogFileDataReader in cat.py could do with a better abstraction, especially if we want to add support for more file types/drivers.