Python печатает только один файл - PullRequest
0 голосов
/ 24 октября 2019

Может кто-нибудь объяснить мне, почему моя функция out () печатает только один файл? Как я могу исправить, BCS он должен печатать много файлов рекурсивно с 2019 DIR

class log():

    def __init__(self, search):
        self.search = search

    def get_files(self):
        path = '/var/log/HOSTS/dhcpd-s/2019'
        for root, directories, filenames in os.walk(path):
            for directory in directories:
                #do whatever u want with absolute dirs path
                dir_path = os.path.join(root, directory)

            for filename in filenames:
                #do whatever u want with absolute file path
                file_path = os.path.join(root, filename)
                if os.path.getsize(file_path) == 0:
                    pass
                else:
                    self.file_path = file_path

    def out(self):
        print(self.file_path)


if __name__=='__main__':
   p = log(search = sys.argv[1])
   p.get_files()
   p.out()

Ответы [ 3 ]

1 голос
/ 24 октября 2019

Вы работаете в цикле

self.file_path = file_path

В каждой итерации он назначает новый путь к файлу и после выхода из цикла сохраняет значение последней итерации.

Вы можете объявить self.file_path как list

def __init__(self, search):
        self.search = search
        self.file_path = []

и добавить file_path в список

self.file_path.append(file_path)

Теперь вы можете распечатать все пути

def out(self):
    for path  in self.file_path:
        print(path)
0 голосов
/ 24 октября 2019

Ниже (собрать данные в список)

import os 
import sys

class log():

    def __init__(self, search):
        self.search = search
        self.file_path = []

    def get_files(self):
        path = '/var/log/HOSTS/dhcpd-s/2019'
        for root, directories, filenames in os.walk(path):
            for directory in directories:
                #do whatever u want with absolute dirs path
                dir_path = os.path.join(root, directory)

            for filename in filenames:
                #do whatever u want with absolute file path
                file_path = os.path.join(root, filename)
                if os.path.getsize(file_path) == 0:
                    pass
                else:
                    self.file_path.append(file_path)

    def out(self):
        print(self.file_path)


if __name__=='__main__':
   p = log(search = sys.argv[1])
   p.get_files()
   p.out()
0 голосов
/ 24 октября 2019

Это должно работать

class log():

    def __init__(self, search):
        self.search = search

    def get_files(self):
        files = []
        path = '/var/log/HOSTS/dhcpd-s/2019'
        for root, directories, filenames in os.walk(path):
            for directory in directories:
                #do whatever u want with absolute dirs path
                dir_path = os.path.join(root, directory)

            for filename in filenames:
                #do whatever u want with absolute file path
                file_path = os.path.join(root, filename)
                if os.path.getsize(file_path) == 0:
                    pass
                else:
                    files.append(file_path)

         self.files_path = files
    def out(self):
        print(self.file_path)


if __name__=='__main__':
   p = log(search = sys.argv[1])
   p.get_files()
   p.out()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...