если имя файла и каталог совпадают с python - PullRequest
0 голосов
/ 11 января 2019

Я новичок в python, поэтому немного запутался в обходе каталогов. Моя проблема в том, что у меня такая структура папок.

-modules/
 -files/
  -aag
   -aag.cfg
   -something1.cfg
  -bfs
   -bfs.cfg
   -something2.cfg 
  and so on

В общем, я должен получить все файлы cfg в каталоге

/modules/files/

Вопрос: мне нужны только файлы конфигурации, если имя каталога и имя файла совпадают. Например: поскольку в папке aag есть две конфигурации, мне нужно получить только файл aag.cfg, а не что-то1.cfg.

Как я могу сделать это в Python?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Это рекурсивное решение, которое перечислит все каталоги и подкаталоги, которые будут соответствовать вашему заданному условию.

import os

def foo(s):
    ans = []
    if os.path.isdir(s):
        for f in os.listdir(s):
            ans.extend(foo(s+r"/"+f))
    elif s.split(r'/')[-1].split('.')[0] == s.split(r'/')[-2]:
        ans.append(s.split(r'/')[-1])
    return ans
print(foo(r"modules")) # "modules is the directory you want to list cfg files"

Это решение будет работать с такой структурой.

-abc/
  -abc1/
    -abc1.cfg
    -lol/
      -lol.cfg
  -pqr
    -pqr1.cfg
  -abc.cfg

Итак, этот код вернет список

[ 'abc1.cfg', 'lol.cfg', 'abc.cfg']

0 голосов
/ 11 января 2019

Если в подкаталоге /modules/files/ есть только один дополнительный уровень подкаталога:

import os
for name in os.listdir('/modules/files'):
    config = '/modules/files/%s/%s.cfg' % (name, name)
    if os.path.isfile(config):
        # found it!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...