Если у меня есть 2 файла .csv, хранящиеся локально data/file_1.csv
и data/file_2.csv
, которые имеют одну и ту же схему, их обоих легко прочитать в одном объединенном фрейме данных, например:
pl.read_csv('data/file_*.csv')
Но если я храню эти же два файла на Google Диске (а не в корзине GCS) и использую GDriveFileSystem
из pydrive2.fs
в качестве файловой системы fsspec, я не могу найти способ использовать шаблон glob и вынужден читать их в отдельно, например
fs = GDriveFileSystem(ROOT_FOLDER_ID, client_id = CLIENT_ID, client_secret = CLIENT_SECRET)
dfs = []
for i in range(1, 3):
with fs.open(f'{ROOT_FOLDER_ID}/data/file_{i}.csv', 'rb') as f:
dfs += pl.read_csv(f)
df = pl.concat(dfs)
Это не только означает, что мне нужно заранее знать и указывать количество файлов и их точные пути к ним, но и код кажется намного менее чистым, чем раньше.
Есть ли способ прочитать эти несколько файлов с помощью общего пути, но используя файловую систему fsspec?
Хотя pydrive2 имеет интерфейс fsspec, похоже, он не объявляет протокол и не регистрируется в fsspec, поэтому вызовы типа fsspec.open("gdrive://...", )
не распознаются автоматически. Это предполагаемое использование, поэтому я предлагаю обсудить с ними проблему, чтобы убедиться, что это реализовано. Вы можете вызвать fsspec.register_implementation вручную, чтобы назначить протокол классу fsspec PyDrive2.
Более старая, менее полная и неизданная версия gdrivefs поддерживает такое использование, поскольку она указана в fsspec.registry.known_implementations.
Я не могу протестировать этот материал pydrive, но можете ли вы использовать функцию fsspec glob, чтобы получить список путей и передать их в scan_csv?
pl.scan_csv(fs.glob(f'{ROOT_FOLDER_ID}/data/file_*.csv')).collect()