Смотреть внутри папки

Это мой текущий скрипт, который проверяет каталог на наличие имен папок, которые начинаются с цифр и имеют длину 5 цифр. Однако теперь я хочу проверить ВНУТРИ папки, которую я только что проверил. Небольшая помощь, пожалуйста?

directory = r'\\cd3\SFTP'

for folder in os.listdir(directory):
    folder = folder.split(' - ')
    #print fn
    if 'infognana' in folder or 'sunriseimaging' in folder or 'mydatasolutions' in folder:
        continue
    if folder[0].isdigit() and len(folder[0]) == 5:
        print folder

2 ответа

Решение

Как вы знаете, если у вас есть имя папки, то вы можете просто использовать os.listdir(folder_name) "заглянуть внутрь"

Единственная проблема в вашем коде состоит в том, что вы теряете имя текущей просматриваемой папки, поскольку вы перезаписываете ее с результатом разделения:

folder = folder.split(' - ')

Если вы сохраните исходное имя папки, то вы можете вызвать os.listdir и выполнить ваши действия:

for folder_name in os.listdir(directory):
    folder = folder_name.split(' - ')
    #print fn
    if 'infognana' in folder or 'sunriseimaging' in folder or 'mydatasolutions' in folder:
        continue
    if folder[0].isdigit() and len(folder[0]) == 5:
        #do something on os.listdir(os.path.join(directory,folder_name))
        print folder

Вот код, который рекурсивно сканирует ваши папки и печатает названия папок, которые начинаются с цифры и имеют длину 5 символов.

import os  
def check(dir):
for f in [x for x in os.listdir(dir) if os.path.isdir(dir+"/{}".format(x))]:
    if any([i in folder_name for i in \ 
                ['infognana', 'sunriseimaging', 'mydatasolutions']]):
    if f[0].isdigit() and len(f)==5:
        print f                     # print the name of the (sub)folder
        check(os.path.join(dir, f)  # do the same thing for this subfolder 

Вы сказали, что хотите проверять папки (не файлы), поэтому нам нужно пропускать файлы. Это делается с помощью os.path.isdir в приведенном выше коде строка 3.
Каждая подпапка печатается на тот случай, если ее часть удовлетворяет условиям, начинающимся с цифры и длиной 5 символов.
Я проверил и запустил приведенный выше код на Ubuntu 16.04, и он отлично работает.

Удачи:)

Другие вопросы по тегам