Вход
Я получаю входные данные от внешнего источника JSON, который содержит пути. Следуйте этому:
datalake-dev/facial_recognition/
datalake-dev/facial_recognition/curation/google-search-images/this_is_a_dir.png/pic0.jpg
datalake-dev/facial_recognition/curation/google-search-images/this_is_a_dir.png/pic1.jpg
datalake-dev/facial_recognition/curation/google-search-images/this_is_a_dir.png/pic10.png
datalake-dev/facial_recognition/curation/google-search-images/this_is_a_dir.png/pic11.jpg
datalake-dev/facial_recognition/curation/google-search-images/this_is_a_dir.png/pic12.png
datalake-dev/facial_recognition/curation/google-search-images/this_is_a_dir.png/pic13.jpg
datalake-dev/facial_recognition/landing/input-images/
datalake-dev/facial_recognition/landing/input-images/this_is_a_dir.png
Помощь
Исходя из этого, мне нужно передать его в формате API / JSON / Dictionary для дальнейшей обработки. До сих пор я прошел через один , два , три и четыре темы. Ничего не достаточно для решения.
Требуемый вывод
Из путей мне нужно получить формат Dictionary / JSON следующим образом:
{
"curation":{
"google-search-images":[
{
"name":"pic0"
},
{
"name":"pic1"
}
]
},
"derived":{
"recognition-matches":[
{
"name":"img2"
}
],
"errors":[
{
"name":"foo"
}
]
}
}
В приведенном выше словаре / JSON имена curation
, google-search-images
, this_is_a_dir.png
являются каталогами. Мне нужно что-то, что рекурсивно помещает их в словарь на основе длины этих путей.
My Trial
for contents in result['Contents']:
directory_or_file_list = contents['Key'].split('/') # To identify if the path is pointing as file / directory
path = contents['Key']
splitted_path = path.split('/')
# ['datalake-dev', 'facial_recognition', 'landing', 'input-images', 'this_is_a_dir.png', 'pic0.jpg']
if '' in splitted_path:
splitted_path.pop()
all_paths.append(splitted_path)
# The object 'api' holds the dictionary expected.
api[splitted_path[0]] = splitted_path[1]
# api[splitted_path[0]] = {splitted_path[1] : {splitted_path[2] : [append_all_elements_under_this]} }
if directory_or_file_list[-1].split('.')[-1] in ['jpg', 'jpeg', 'png', 'tiff']:
print(path)
else:
print(path)
Примечание: возможно, есть способ жесткого кода, но тогда я бы не стал публиковать
это здесь, это было бы так. Кроме того, нет никаких шансов использовать os.walk ().
Там было сделано это. Это не файловая система ОС.
Любая помощь, кроме моего кода приветствуется!