Выполнение функций для всего каталога файлов - PullRequest
0 голосов
/ 29 декабря 2018

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

В моем текущем случае это будут выходные данные сетевых устройств.Например, ниже берет вывод из «show cdp соседние детали» на коммутаторе и слегка очищает вывод.

Переменная «thefile» используется для запуска с одним файлом, но мне нужно работать слюбое другое количество файлов в каталоге.Несколько сценариев?Какой-то код os.walk () в этом скрипте?

hostcheck = "hostname"
devicecheck = "Device ID"
ipaddresscheck = "IP address"
platformcheck = "Platform"
interfacecheck = "Interface"
hyphencheck = "---"

thefile = "core-cdp-detail.log"

with open(thefile) as search:
    for line in search:
        line = line.rstrip()  # remove '\n' at end of line
        if hostcheck in line:
            hostentry = line.split("hostname ")[1]
            print("Below CDP information is from " + hostentry)
        elif devicecheck in line:
            print("Remote " + line)
        elif ipaddresscheck in line:
            print("Remote " + line.lstrip())
        elif platformcheck in line:
            print(line.split(",")[0])
        elif interfacecheck in line:
            print("Remote Interface: " + line.split("port):")[1])
        elif hyphencheck in line:
            print(line)
            print("\n")
            print("Local Device ID: " + hostentry)

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

вы можете пройти каталог, используя os.walk

import os

hostcheck = "hostname"
devicecheck = "Device ID"
ipaddresscheck = "IP address"
platformcheck = "Platform"
interfacecheck = "Interface"
hyphencheck = "---"


def check_content(file_path):
    with open(thefile) as search:
        for line in search:
            line = line.rstrip()  # remove '\n' at end of line
            if hostcheck in line:
                hostentry = line.split("hostname ")[1]
                print("Below CDP information is from " + hostentry)
            elif devicecheck in line:
                print("Remote " + line)
            elif ipaddresscheck in line:
                print("Remote " + line.lstrip())
            elif platformcheck in line:
                print(line.split(",")[0])
            elif interfacecheck in line:
                print("Remote Interface: " + line.split("port):")[1])
            elif hyphencheck in line:
                print(line)
                print("\n")


def check_dir_content(dir_path):

    for subdir, dirs, files in os.walk(dir_path):
        for file in files:
            check_content(os.path.join(subdir, file))

if __name__ == '__main__':
    check_dir_content('/Users/gaurang.shah/Documents')
0 голосов
/ 29 декабря 2018
import glob

for file in glob.glob('*.log'):
    with open(file) as search:
        ...

(или любые файлы, для которых вы хотите выполнить это, вы можете заменить '*.log' на '*.*' или 'logs/*.log' и т. Д.)

Для получения дополнительной информации см. Документацию по glob модуль.

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