Исключить файлы в словаре - PullRequest
1 голос
/ 10 мая 2019

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

path="/home/tmp"

def PathToDict(path):
    st = os.lstat(path)
    result = {}
    if S_ISDIR(st.st_mode):
        result['Path'] = path
        result['Subdir'] = {
           name: PathToDict(os.path.join(path,name))                       
           for name in os.listdir(path)}
        result['Num_Subdir'] = int(len([i for i, j, k in os.walk(path)]))

Это функция, которая вызывает все папки, но проблема в том, что они также вспоминают такие файлы, как .sh или logs.Я пытаюсь использовать метод os.path.isdir, но не могу.

Фактический вывод:

'Path': '/var/lib/jenkins/jobs/updates',
            'Num_Subdir': 8,
            'Subdir': {
                'nextBuildNumber': {},
                'config.xml': {},
                'lastSuccessful': {},
                'lastStable': {},
                'builds': {
                    'Path': '/var/lib/jenkins/jobs/updates2',
                    'Num_Subdir': 7,
                    'Subdir': {
                        'lastStableBuild': {},
                        'lastSuccessfulBuild': {},
                        '1': {
                            'Path': '/var/lib/jenkins/jobs/updates3',
                            'Num_Subdir': 1,
                            'Subdir': {
                                'changelog.xml': {},
                                'injectedEnvVars.txt': {},
                                'build.xml': {},
                                'changelog.xml.temp2': {},
                                'log': {}

И мне нужен вывод, исключая, например, .xml и .txt.В корне пути у меня также есть файлы, и они перечислены в словаре, и мне тоже нужно исключить эти файлы.

Ответы [ 3 ]

0 голосов
/ 10 мая 2019

Это должно дать вам все каталоги.

import os

path = 'path_to_root_dir'

dir_list = []
exclude = ['directory', 'to', 'ignore']
for root, dirs, files in os.walk(path):
    dirs[:] = [d for d in dirs if d not in exclude]
    for dir in dirs:
        dir_list.append(os.path.join(root,dir))

print(dir_list)
0 голосов
/ 10 мая 2019
path = r'C:\Users\user\Videos\xox'
import os

def fun(path):
    path = path


    lis_of_dir = [ (os.path.join(path,i),i) for i in os.listdir(path) if os.path.isdir(os.path.join(path,i))]
    length = len(lis_of_dir)
    sub = [{i[1]:fun(i[0])} for i in lis_of_dir]

    return {'path':path,'no_of_dir':length,'sub_dir':sub}

print(fun(path))
0 голосов
/ 10 мая 2019

попробуйте это:

import os

# Empty Dictionary that will store the Directory Tree
Directories = {}

# this value will act as a counter for folder key's
i = 0

# Assign your directory location to this variable
rootDir = r'Dir_path'


for dirName, subdirList, fileList in os.walk(rootDir):
    Directories[str(i)] = dirName
    i += 1

print(Directories)

Честно говоря, я бы рекомендовал сохранять пути Dir в списке, а не в словаре, так как это значительно упрощает доступ к ним

...