@evgeh4ik

Как заменить указание папки на перебор всех вложенных папок?

Есть такой код:

#!/usr/bin/env python36
    
    import os
    import xml.dom.minidom
    import argparse
    import re
    
    parser = argparse.ArgumentParser()
    parser.add_argument('-i', '--host' , help='Input hostname')
    parser.add_argument('-z', '--zone' , help='Input zone name')
    args = parser.parse_args()
    
    spisok =[]
    for root, dirs, files in os.walk(r'/mnt/'+args.host+'/'+args.zone+'/Adp_GO_MarketPlace_root/defaultVars/Vars/Connections'):
    	for file in files:
    		if file.endswith(".substvar"):
    			path = os.path.join(root, file)
    			spisok.append(path)
    
    for element in spisok:
    
    	doc = xml.dom.minidom.parse(element)
    	data ={}
    
    	for info in doc.getElementsByTagName("globalVariable"):
    		name = str(info.getElementsByTagName("name")[0].firstChild.data)
    		value = str(info.getElementsByTagName("value")[0].firstChild.data)
    		data[name]=value
    	print(element,"\n",data,"\n")


В коде есть строчка:

for root, dirs, files in os.walk(r'/mnt/'+args.host+'/'+args.zone+'/Adp_GO_MarketPlace_root/defaultVars/Vars/Connections'):

Указан конкретный адаптер (Adp_GO_MarketPlace_root). В то же время в args.zone есть еще 50 таких папок, как Adp_GO_MarketPlace_root. Как мне заменить конкретное указание папки с Adp_GO_MarketPlace_root таким образом, что бы скрипт работал по всем вложенным директориям относительно args.zone, а не только Adp_GO_MarketPlace_root? Указывать аргументом не хочу, нужно именно перебирать все папки сразу.
В результате хочу выводить на экран не element + data, а название адаптера и data.
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
@bbkmzzzz
если в лоб делать - можно так:
for rootDir in os.listdir(r'/mnt/'+args.host+'/'+args.zone):
        for root, dirs, files in os.walk(r'/mnt/'+args.host+'/'+args.zone+'/' + rootDir +'/defaultVars/Vars/Connections'):
            for file in files:
                if file.endswith(".substvar"):
                    path = os.path.join(root, file)
                    spisok.append(path)

P.S.
python 3.6 получил классную штуку - f-strings
r'/mnt/'+args.host+'/'+args.zone+'/' + rootDir +'/defaultVars/Vars/Connections'

может выглядеть вот так:
f'/mnt/{args.host}/{args.zone}/{rootDir}/defaultVars/Vars/Connections'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы