Azure ADLS Gen2: список файлов только в каталоге верхнего уровня?

Я использую следующий код для получения файлов в подкаталоге контейнера:

from azure.storage.filedatalake import DataLakeServiceClient
remote_paths = service_client.get_file_system_client("mycontainer").get_paths(path = "a/b/c")

Проблема в том, что get_paths() возвращает все файлы и папки во всех подкаталогах c, но меня интересуют только файлы в каталоге c.

Я знаю о .is_directory, но это все равно возвращает файлы в подкаталогах.

Я мог бы удалить путь (a/b/c) из набора результатов, а затем проверить наличие /, что указывало бы на то, что файл находится во вложенной папке, но мне интересно, есть ли лучший способ?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы правы, метод get_paths() в Azure DataLakeServiceClient действительно возвращает все файлы и папки по указанному пути и его подкаталогам. К сожалению, не существует встроенного способа ограничить это только каталогом верхнего уровня.

Однако вы все равно можете отфильтровать результаты, чтобы включать только файлы в каталоге верхнего уровня, проверив, содержит ли имя пути какие-либо дополнительные косые черты за пределами исходного каталога. Вот пример того, как вы можете это сделать:

from azure.storage.filedatalake import DataLakeServiceClient

def get_top_level_files(service_client, container_name, directory_path):
    file_system_client = service_client.get_file_system_client(container_name)
    paths = file_system_client.get_paths(path=directory_path)
    
    top_level_files = []
    
    for path in paths:
        # Check if the path is a file and is in the top-level directory
        if not path.is_directory and '/' not in path.name[len(directory_path):]:
            top_level_files.append(path)
    
    return top_level_files

Использование: service_client = DataLakeServiceClient(...) top_level_files = get_top_level_files(service_client, "mycontainer", "a/b/c")

В этом коде path.name[len(directory_path):] получает часть пути после указанного каталога, а '/' не в path.name[len(directory_path):] проверяет, есть ли эта часть.
К сожалению, я не думаю, что есть более простой способ добиться этого, но этот метод надежен и надежен.

использовать len(directory_path) для нарезки строк очень разумно. Спасибо!

kiesel 02.05.2024 14:37

Добро пожаловать, Кизель, пожалуйста. Не забудьте проголосовать за мой ответ.

Suraj_j 04.05.2024 01:20

@downvoters, почему?

kiesel 06.05.2024 08:22

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