Чтение файла по частично известному имени
Задача состоит в том чтобы открыть файл зная только часть имени. Файлы - экселевские таблички генерируемые автоматически, после названия идут дата и время, каждый раз уникальные: 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 шт):
Используте 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))]
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)
# здесь работает с фреймом ...