2017-02-19 18 views
0

Итак, я работаю над скриптом, который будет проходить через множество файлов журналов, которые ищут строки и имена серверов.glob(), чтобы исключить подкаталоги

В моем тестировании я использовал glob(), чтобы создать список файлов для троллинга.

Однако, чтобы улучшить мое тестирование, я скопировал каталог журналов из живой системы (11gb!) - и все не так гладко, как раньше ... похоже, что glob рассматривает подкаталоги в виде файлов, и поэтому readlines() пытается их прочитать.

Мне не нужны файлы в подкаталогах, я просто хочу сканировать файлы в родном каталоге.

Я думаю, что я могу использовать os.walk() для достижения этой цели, с чем-то вроде:

logs = next(os.walk('var/opt/server/log/current'))[2] 

В противоположность:

logs = glob('/var/opt/server/log/current/*') 

Потому что я учусь Python, я хочу, чтобы убедиться, что я узнаю все правильно. Так что я исправлю в том, что я говорю выше? Или я должен использовать glob() несколько иначе, чтобы достичь этой цели?

+0

Чем больше я поиграйте с ним, тем больше я понимаю, что 'следующий()' не является правильным инструментом для работы здесь, как это повысит 'StopIteration', когда он достигнет конца списка. Полагаю, я мог бы использовать 'try:' и 'except:' для 'StopIteration', но это кажется беспорядочным. Я прочитал, что 'for *()' будет автоматически, кроме 'StopIteration', так что, может быть, цикл for через список каталогов будет лучше? – jonnybinthemix

ответ

1

Используйте GLOB и отфильтровать все каталоги:

logs = [log for log in glob('/var/opt/server/log/current/*') if not os.path.isdir(log)] 
+0

Это здорово, спасибо. Кажется, это работает нормально. Хотя тестирование - медленный процесс, когда он проходит через каждую строку в 11gb файлов журнала! ха-ха. - Я уверен, что полностью понимаю «журнал для входа в систему». Я понимаю, что «для входа в систему ...» будет циклом для всего в инструкции glob, но что делает первый бит журнала? Сохраняет ли она каждую итерацию 'for log in glob()' как 'log'? – jonnybinthemix

+0

@jonny Это построение называется пониманием списка или списком comp для краткости. Вы можете прочитать об этом в официальном учебнике, и в основных документах есть дополнительная информация. –