Рекурсивно перебирать файловую систему на диске? - PullRequest
0 голосов
/ 31 января 2020

Я пытаюсь рекурсивно перебирать папку с именем «users», которая хранится на моем диске. этот файл выглядит примерно так это папка, то она рекурсивно вызывает себя.

def start_printing(user_fld_id, service):
    flow_of_file = service.files().list(q=" '{0}' in parents ".format(user_fld_id),spaces ='drive').execute()

    for item in flow_of_file['files']:  

        if item['mimeType'] == 'application/vnd.google-apps.folder':
            print('Name of File is: {0} of type: {1}'.format(item['name'],item['mimeType']))
            folder_name = item['name']
            folder_id = item['id']
            user_fld_id = folder_id
            start_printing(user_fld_id, service)
        else:
            print(u'This is content with name =  {0} for folder {1} with ID {2}'.format(item['name'],folder_name, item['id']))
            file_id_number = item['id']
            response = service.files().get_media(fileId = file_id_number).execute()
            send_to_another_function(response, folder_name)

Моя задача - отправить переменную response вместе с именем папки, в которой находится мой текущий файл. Согласно моей программе я не могу сохранить значение имени папки в последующих циклах.

Как мне решить эту проблему? Я также открыт для новых решений!

Спасибо

1 Ответ

0 голосов
/ 03 февраля 2020

Я думаю, что наиболее очевидным решением является сохранение предыдущих папок в качестве входного массива.

Добавьте один параметр к вашей функции start_printing. И заполняйте его, перебирая папки следующим образом.

def start_printing(user_fld_id, service, previous_folders=[]):
    flow_of_file = service.files().list(q=" '{0}' in parents ".format(user_fld_id),spaces ='drive').execute()

    for item in flow_of_file['files']:  

        if item['mimeType'] == 'application/vnd.google-apps.folder':
            print('Name of File is: {0} of type: {1}'.format(item['name'],item['mimeType']))
            folder_name = item['name']
            folder_id = item['id']
            user_fld_id = folder_id
            start_printing(user_fld_id, 
                           service,
                           previous_folders=previous_folders+[item])    # Added line     
        else:
            print(u'This is content with name =  {0} for folder {1} with ID {2}'.format(item['name'],folder_name, item['id']))
            file_id_number = item['id']
            response = service.files().get_media(fileId = file_id_number).execute()
            send_to_another_function(response, folder_name)

Итак, вы можете получить доступ к этому массиву при последующем вызове. В этом случае последний элемент этого массива будет справа над папкой.

Альтернативно вы можете извлекать папку каждый раз через атрибут parents переменной item. Но, сделав этот запрос раньше, мы получим одну и ту же информацию дважды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...