У Python 3.5 та новіших версіях використовується нова рекурсивна **/
функціональність:
configfiles = glob.glob('C:/Users/sam/Desktop/file1/**/*.txt', recursive=True)
Коли recursive
встановлено, **
після цього роздільник шляху відповідає 0 або більше підкаталогів.
У більш ранніх версіях Python glob.glob()
не можна реєструвати рекурсивно файли в підкаталогах.
У такому випадку я б використовував os.walk()
комбінований з fnmatch.filter()
:
import os
import fnmatch
path = 'C:/Users/sam/Desktop/file1'
configfiles = [os.path.join(dirpath, f)
for dirpath, dirnames, files in os.walk(path)
for f in fnmatch.filter(files, '*.txt')]
Це дозволить рекурсивно використовувати ваші каталоги та повертати всі абсолютні імена до відповідних .txt
файлів. У цьому конкретному випадку fnmatch.filter()
може виникнути надмірність, ви також можете використати .endswith()
тест:
import os
path = 'C:/Users/sam/Desktop/file1'
configfiles = [os.path.join(dirpath, f)
for dirpath, dirnames, files in os.walk(path)
for f in files if f.endswith('.txt')]