Как выбрать файлы с нумерованными расширениями из папки? - PullRequest
0 голосов
/ 26 января 2019

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

exported_file_1_aaa.001
exported_file_2_aaa.002
exported_file_3_aaa.003
...
exported_file_5_zzz.925
...and so on.

Я знаю, как выбрать файлы с определенным расширением, например, «.txt», из папки и добавить его всписок или дикт.Есть ли способ решить эту проблему с помощью '.nnn'

ext = '.nnn'
all_files = [i for i in os.listdir(dir) if os.path.splitext(i)[1] == ext]
for f in all_files:
    ...

Ответы [ 3 ]

0 голосов
/ 26 января 2019

Вы можете использовать модуль glob.

import glob

my_dir = "mydir"

all_files = [fn for fn in glob.glob(f"{my_dir}/*.[0-9][0-9][0-9]")]
0 голосов
/ 26 января 2019

Вы можете смешивать возможности оболочки: (glob) и регулярных выражений (re).

С помощью glob вы можете получить файлы, заканчивающиеся числом, так что мы получим ограниченноеНумерация файлов для re для окончательной проверки:

glob.iglob('exported_file_*.*[0-9]')

Затем мы можем точно сопоставить файлы с шаблоном Regex:

\.\d+$

это будет соответствовать именам файлов, заканчивающимся цифрами послепоследний ..

Составление:

import glob
import re
[file for file in glob.iglob('exported_file_*.*[0-9]') if re.search(r'\.\d+$', file)]

Глобализация оболочки не такая гибкая, как re, иначе мы могли бы сделать только с glob.

Кроме того, если вы уверены, что все файлы заканчиваются определенным числом цифр, то только glob будет работать, например, для файлов, заканчивающихся на 3 цифры после последней .:

glob.iglob('exported_file_*.[0-9][0-9][0-9]')
0 голосов
/ 26 января 2019

Если вам не важна длина расширения, вы можете использовать метод isdigit :

all_files = [i for i in os.listdir(dir) if os.path.splitext(i)[1].isdigit()]
for f in all_files: 
    ....
...