Выборка из каталога файлов, в имени которых строго только цифры

glob.glob(patch+'*.*')

Так получаю список всех файлов с любым расширением.

Возможно ли задать таким образом, чтобы получить список всех файлов, в имени которых исключительно цифры, не зависимо от расширения?


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

Автор решения: Oopss
from pathlib import Path

def list_numeric_files(directory):
    # Создаем объект Path для указанной директории
    path = Path(directory)
    # Ищем все файлы в директории
    files =path.glob('*')
    # Фильтруем файлы, имена которых состоят только из цифр
    return [file for file in files if file.is_file() and file.stem.isdigit()]



# Домашняя директория
directory = Path.home()
numeric_files = list_numeric_files(directory)

for file in numeric_files:
    print(file)

C:\Users\user\111.txt
→ Ссылка
Автор решения: mrgervant

Решение через filter - применяем re.search на список файлов из glob.glob:

import glob
import re

def glob_re(pattern, strings):
    return list(filter(re.compile(pattern).search, strings))

pattern = r'(?<=\/)[0-9]+\.[^.]+$'
glob_list = glob.glob(r'/var/www/user/data/*.*')

filenames = glob_re(pattern, glob_list)

Linux: (?<=\/)[0-9]+\.[^.]+$

Windows: (?<=\\)[0-9]+\.[^.]+$

Решение работает именно со списком файловых путей, а не с названиями файлов, так как (?<=\/) или (?<=\\) ищет разделитель путей.

На выходе получаем отфильтрованный список с исходными полными путями до файлов:

print(glob_list)  # Все файловые пути
print(filenames)  # Отфильтрованные файлы

['/var/www/user/data/1241351.py', '/var/www/user/data/test1.py', '/var/www/user/data/12431241.txt', '/var/www/user/data/123test.txt']
['/var/www/user/data/1241351.py', '/var/www/user/data/12431241.txt']
→ Ссылка