Python: как использовать glob и wildcard для открытия файлов CDF

Я пытаюсь открыть несколько файлов .cdf и сохранить их в словаре, но когда я пытаюсь использовать подстановочный знак в команде pycdf.CDF(), возвращается эта ошибка: spacepy.pycdf.CDFError: NO_SUCH_CDF: The specified CDF does not exist.

Файлы .cdf имеют заданное начальное имя (instrumentfile), дату (20010101), а затем переменную секцию (может быть 1, 2, 3 или 4). Это означает, что я не могу просто написать такой код:

DayCDF = pycdf.CDF('/home/location/instrumentfile'+str(dates)+'.cdf')

Мне также нужно изменить имена переменных, которым назначены данные .cdf, поэтому я пытаюсь импортировать данные в словарь (тоже не уверен, что это возможно).

Текущий код выглядит так:

dictDayCDF = {}

for x in range(len(dates)):
    dictDayCDF["DayCDF"+str(x)] = pycdf.CDF('/home/location/instrumentfile'+str(dates[x])+'*.cdf')


и возвращает ошибку spacepy.pycdf.CDFError: NO_SUCH_CDF: The specified CDF does not exist.

Я также пытался использовать glob.glob, поскольку я видел, что это рекомендуется в ответах на аналогичные вопросы, но я не смог понять, как применить команду для открытия файлов .cdf:

dictDayCDF = {}

for x in range(len(dates)):
    dictDayCDF["DayCDF"+str(x)] = pycdf.CDF(glob.glob('/home/location/instrumentfile'+str(dates[x])+'*.cdf'))


с этой ошибкой возвращается: ValueError: pathname must be string-like

Ожидаемый результат — словарь файлов .cdf, которые можно вызывать с именами DayCDF1, DayCDF2 и т. д., которые можно импортировать независимо от конечной секции переменных.


person Emmi Starr    schedule 10.09.2019    source источник


Ответы (1)


Как насчет того, чтобы начать со следующего скелета кода:

import glob

for file_name in glob.glob('./*.cdf'):
    print(file_name)
    #do something else with the file_name

Что касается основной причины сообщения об ошибке, с которым вы сталкиваетесь: если вы проверьте документации по методу, который вы пытаетесь использовать, он указывает, что

Откройте или создайте файл CDF, создав объект этого класса. Параметры:

путь: строка

name of the file to open or create

на основании этого мы можем сделать вывод, что он ожидает одно имя файла, а не список имен файлов. Когда вы пытаетесь форсировать список имен файлов, то есть результат использования glob, он жалуется, как вы заметили.

person Emre Sevinç    schedule 10.09.2019
comment
Я набросал базовый цикл if elif else на основе os.path.isfile - если файл существует, импортируйте cdf, если нет, продолжайте. На данный момент существует ограниченное количество окончаний файлов, но когда у меня будет время, я попытаюсь сделать код немного лучше, начиная с вашего предложения. - person Emmi Starr; 10.09.2019
comment
Если ваш шаблон имени файла (включая подстановочный знак) является допустимым, то glob.glob вернет все имена файлов, соответствующие этому шаблону. Поэтому я не думаю, что вам нужно использовать os.path.isfile. Если он находится в списке значений, возвращаемых glob, то по замыслу он должен существовать (если только какой-то другой процесс тем временем не удалил тот же самый файл). - person Emre Sevinç; 10.09.2019