Как получить файлы в каталоге, включая все подкаталоги - PullRequest
43 голосов
/ 05 июня 2009

Я пытаюсь получить список всех файлов журнала (.log) в каталоге, включая все подкаталоги.

Ответы [ 5 ]

80 голосов
/ 05 июня 2009
import os
import os.path

for dirpath, dirnames, filenames in os.walk("."):
    for filename in [f for f in filenames if f.endswith(".log")]:
        print os.path.join(dirpath, filename)
10 голосов
/ 05 июня 2009

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

import os
from glob import glob

files = []
start_dir = os.getcwd()
pattern   = "*.log"

for dir,_,_ in os.walk(start_dir):
    files.extend(glob(os.path.join(dir,pattern))) 
7 голосов
/ 05 июня 2009

Оформить заказ Python Рекурсивный каталог Walker . Короче говоря os.listdir () и os.walk () ваши друзья.

1 голос
/ 21 августа 2017

У меня есть решение:

import os
for logfile in os.popen('find . -type f -name *.log').read().split('\n')[0:-1]:
      print logfile

или

import subprocess
(out, err) = subprocess.Popen(["find", ".", "-type", "f", "-name", "*.log"], stdout=subprocess.PIPE).communicate()
for logfile in out.split('\n')[0:-1]:
  print logfile

Эти два имеют преимущество find . -type f -name *.log.

Первый проще, но не гарантирован для пробела при добавлении -name *.log, но работал нормально просто find ../testdata -type f (в моей среде OS X).

Второй, использующий подпроцесс, кажется более сложным, но это безопасный пробел (опять же, в моей среде OS X).

Это вдохновлено Крисом Банчем, в ответ https://stackoverflow.com/a/3503909/2834102

1 голос
/ 05 июня 2009

Если вы хотите, чтобы список в текущем каталоге, вы можете использовать что-то вроде:

import os

for e in os.walk(os.getcwd()):
    print e

Просто измените

os.getcwd()

на другой путь, чтобы получить результаты там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...