Bagaimana cara mengubah jalur file menjadi tampilan pohon?

Saat ini saya memiliki beberapa file dengan python yang memiliki format jalur file berikut:

a/b/c/d/e/file1
a/b/c/d/e/file2
a/f/g/h/i/file3
a/f/g/h/i/file4

Sekarang, ketika saya mengambil jalur ini dengan Python, saya ingin mengubahnya menjadi format JSON yang dapat dibaca oleh plugin jquery pihak ketiga (misalnya fancytree, jqxTree) untuk mengubahnya menjadi tampilan pohon. Mungkin ada cara lain yang lebih mudah, mohon sarannya. Terima kasih!


person return 0    schedule 05.08.2015    source sumber


Jawaban (1)


Dari Python, Anda dapat membuat JSON yang Anda inginkan sebagai berikut (perhatikan bahwa indentasi dan pengurutan tidak diperlukan jika Anda hanya mengirimkan JSON secara keseluruhan, tetapi keduanya membuat output dapat dibaca untuk debugging):

import collections
import json

myfiles = '''
    a/b/c/d/e/file1
    a/b/c/d/e/file2
    a/f/g/h/i/file3
    a/f/g/h/i/file4
'''

# Convert to a list
myfiles = myfiles.split()


def recursive_dict():
    """
    This function returns a defaultdict() object
    that will always return new defaultdict() objects
    as the values for any non-existent dict keys.
    Those new defaultdict() objects will likewise
    return new defaultdict() objects as the values
    for non-existent keys, ad infinitum.
    """
    return collections.defaultdict(recursive_dict)


def insert_file(mydict, fname):
    for part in fname.split('/'):
        mydict = mydict[part]

    # If you want to record that this was a terminal,
    # you can do something like this, too:
    # mydict[None] = True

topdict = recursive_dict()
for fname in myfiles:
    insert_file(topdict, fname)

print(json.dumps(topdict, sort_keys=True,
                indent=4, separators=(',', ': ')))

Kode ini menghasilkan output berikut:

{
    "a": {
        "b": {
            "c": {
                "d": {
                    "e": {
                        "file1": {},
                        "file2": {}
                    }
                }
            }
        },
        "f": {
            "g": {
                "h": {
                    "i": {
                        "file3": {},
                        "file4": {}
                    }
                }
            }
        }
    }
}
person Patrick Maupin    schedule 06.08.2015
comment
Apa yang dilakukan def recursive_dict(): return collections.defaultdict(recursive_dict)? - person return 0; 10.08.2015