루트부터 디렉터리 구조를 출력하기 위해 Find를 사용해왔는데, 시간이 좀 걸린다는 점은 개의치 않습니다. 내 문제는 각 파일 경로를 반복하는 중복 정보를 줄이고 파일을 JSON 형식으로 출력하고 싶다는 것입니다.
터미널에서 실행할 수 있어야 하는데 상자 등에서 Python 파일을 만들 수 없습니다.
예를 들면 다음과 같습니다.
root
|_ fruits
|___ apple
|______images
|________ apple001.jpg
|________ apple002.jpg
|_ animals
|___ cat
|______images
|________ cat001.jpg
|________ cat002.jpg
그것은 다음과 같이 될 것입니다 ...
{"data" : [
{
"type": "folder",
"name": "animals",
"path": "/animals",
"children": [
{
"type": "folder",
"name": "cat",
"path": "/animals/cat",
"children": [
{
"type": "folder",
"name": "images",
"path": "/animals/cat/images",
"children": [
{
"type": "file",
"name": "cat001.jpg",
"path": "/animals/cat/images/cat001.jpg"
}, {
"type": "file",
"name": "cat001.jpg",
"path": "/animals/cat/images/cat002.jpg"
}
]
}
]
}
]
}
]}
답변1
다음은 재귀를 사용하여 원하는 패턴을 출력하는 빠른 Python 프로그램입니다. Python 2와 3에서 작동해야 합니다(비록 2에서만 테스트했지만). 첫 번째 인수는 이동할 디렉터리이거나 기본적으로 스크립트는 현재 디렉터리를 사용합니다.
#!/usr/bin/env python
import os
import errno
def path_hierarchy(path):
hierarchy = {
'type': 'folder',
'name': os.path.basename(path),
'path': path,
}
try:
hierarchy['children'] = [
path_hierarchy(os.path.join(path, contents))
for contents in os.listdir(path)
]
except OSError as e:
if e.errno != errno.ENOTDIR:
raise
hierarchy['type'] = 'file'
return hierarchy
if __name__ == '__main__':
import json
import sys
try:
directory = sys.argv[1]
except IndexError:
directory = "."
print(json.dumps(path_hierarchy(directory), indent=2, sort_keys=True))