2013-07-27 9 views
11

Ho un cliente non tecnico che ha alcuni dati di prodotto gerarchici che caricherò in una struttura ad albero con Python. L'albero ha un numero variabile di livelli e un numero variabile di nodi e nodi foglia ad ogni livello.Rappresenta una gerarchia ad albero utilizzando un foglio di calcolo Excel per essere facilmente analizzato dal lettore CSV Python?

Il client conosce già la gerarchia dei prodotti e vorrebbe mettere tutto in un foglio di calcolo Excel da analizzare.

Quale formato è possibile utilizzare per consentire al client di inserire e conservare facilmente i dati e di poter analizzare facilmente un albero con CSV di Python? Il passaggio a una colonna per ogni livello non è privo di intoppi (soprattutto se introduciamo più tipi di nodi)

+0

Non sono sicuro di aver capito "Il passaggio a una colonna per ogni livello non è privo di inconvenienti". Le informazioni gerarchiche sarebbero richieste in ogni caso. –

risposta

13

Per i lettori futuri, ho finito per utilizzare una gerarchia basata su colonne in cui ogni riga è l'attraversamento completo di una foglia. Quindi finisci con tante file quante sono le foglie.

Electronics | Computers | Laptops 
Electronics | Computers | Desktop 
Electronics | Game Systems | Xbox 
Electronics | Game Systems | PS3 
Electronics | Game Systems | Wii 
Electronics | MP3 Players | iPod Shuffle 
Clothing | Menswear  | Pants   | Shorts 
Clothing | Menswear  | Pants   | Pajamas 

Nello script, Python attraversa riga per riga, cella per cella, tenendo traccia sia della riga corrente e la riga precedente. Dal momento che attraversi da sinistra a destra vai da una radice all'altra. Se la colonna corrente nella riga corrente è sempre diversa dalla colonna corrente nella riga precedente, allora dobbiamo aver passato un nuovo ramo e aggiungeremo un nuovo nodo al nostro albero.

+0

Raccomando anche questa soluzione. IMO, utilizzando un rientro di riga vuoto non è buono, soprattutto per utilizzare i filtri di dati in Excel, tutte le celle dovrebbero avere un valore. Quindi la soluzione di Erich è pulita sia sui lati Excel che Python. –

+0

Quindi, sul lato python, puoi semplicemente usare una struttura nidificata di defaultdict (dict) –

0

Se il foglio di calcolo è un must in questa soluzione, la gerarchia può essere rappresentata da rientri sul lato di Excel (celle vuote sul inizio di file), una riga per nodo/foglia. Dal lato Python, è possibile analizzarli alla struttura ad albero (ovviamente è necessario filtrare le righe vuote e alcune altre eccezioni). Il tipo di nodo può essere specificato sulla propria colonna. Ad esempio, potrebbe anche essere la prima cella non vuota.

Suppongo che il livello di gerarchia sia limitato (ad esempio, massimo 8 livelli), altrimenti Excel non è affatto una buona idea.

Inoltre, esiste una libreria chiamata openpyxl, che può aiutare a leggere direttamente i file di Excel, senza che l'utente debba convertirli in CSV (aggiunge usabilità all'approccio generale).

Un altro approccio consiste nel mettere un numero di livello nella prima cella. Il numero non dovrebbe mai essere incrementato di 2 o più.

Un altro approccio consiste nell'utilizzare alcuni ID per ciascun nodo e ogni foglia del nodo dovrebbe specificare l'ID del genitore. Ma questo non è molto user-friendly.

Problemi correlati