Чтение файла по частично известному имени

Задача состоит в том чтобы открыть файл зная только часть имени. Файлы - экселевские таблички генерируемые автоматически, после названия идут дата и время, каждый раз уникальные: file_name_123456789. Нужна возможность открывать файл зная только начальную часть file_name.

Пробовал использовать регулярные выражения - вылезают ошибки.

data = pandas.read_excel('file_name\S*')

На такой код вылезает ошибка: [Errno 2] No such file or directory: 'file_name\S*'

Использование шаблона тоже не помогает:

pattern = re.compile('\S*')
data = pandas.read_excel('file_name{}'.format(pattern))

Ошибка: [Errno 22] Invalid argument: "file_namere.compile('\\S*')"

Каким образом это можно реализовать? Возможно я как то не так использую регулярные выражения?

Среда - PyCharm.


Ответы (2 шт):

Автор решения: Wiktor Stribiżew

Используте glob:

import glob

Найдите все файлы, содержащие в имени file_name:

fldr = r'ПУТЬ_К_ФАЙЛАМ'
files = glob.glob(fr"{fldr}/file_name*")

Если нужно, добавьте условия, если нужно, даже с использованием регулярных выражений, например, если после file_name должен быть символ _, за которым должна следовать цифра:

import re
files = glob.glob(fr"{fldr}/file_name*")
files = [f for f in files if re.search(r'^file_name_\d', os.path.basename(f))]
→ Ссылка
Автор решения: MaxU

Pandas позволяет напрямую работать с объектами-путями из стандартного (для Python 3.x) модуля pathlib:

from pathlib import Path

path = Path(r"/path/to/data/files")

for f in path.glob("file_name*.xlsx"):
    df = pd.read_excel(f)
    # здесь работает с фреймом ... 

→ Ссылка