Выборка из каталога файлов, в имени которых строго только цифры
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']