Подтвердить что ты не робот

Как получить файлы в каталоге, включая все подкаталоги

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

4b9b3361

Ответ 1

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)

Ответ 3

Вы также можете использовать модуль 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))) 

Ответ 4

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

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).

Это вдохновляет Крис Бунч, в ответе fooobar.com/questions/38150/...

Ответ 5

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

import os

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

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

os.getcwd()

на другой путь для получения результатов.