Я пытаюсь получить список всех файлов журнала (.log) в каталоге, включая все подкаталоги.
Как получить файлы в каталоге, включая все подкаталоги
Ответ 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)
Ответ 2
Оформить заказ Рекурсивный хостинг для Python. Короче говоря, os.listdir() и os.walk() - ваши друзья.
Ответ 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()
на другой путь для получения результатов.