使用Excel电子表格表示树形层次结构,以便Python CSV读取器轻松解析。

14
我有一个非技术类客户,他有一些分层产品数据,我将使用Python将其加载到树形结构中。 树具有可变数量的层级,以及每个级别的可变数量的节点和叶子节点。
客户已经知道产品的层次结构,并希望将所有内容放入Excel电子表格中,以便我解析。
我们可以使用哪种格式,使得客户可以轻松输入和维护数据,并且我可以轻松地将其解析为Python's CSV格式的树形结构? 每个级别使用一列并不是没有问题(特别是如果引入多个节点类型)。

我不确定我是否理解了“每个级别都有一个列”的含义,这并非没有问题。无论如何,分层信息都是必需的。 - Roman Susi
2个回答

15

对于未来的读者,我最终使用了一种基于列的层次结构,其中每一行是到叶子节点的完整遍历。因此,您最终会得到与叶子节点数量相同的行数。

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

在脚本中,Python逐行、逐列遍历,并跟踪当前行和前一行。由于您从左到右遍历,所以从根向叶子移动。如果当前行中的当前列与上一行中的当前列有任何不同,则我们必须进入一个新���支,然后将一个新节点添加到我们的树中。


我也推荐这个解决方案。在我看来,使用空行缩进并不好,特别是在Excel中使用数据筛选器时,所有单元格都应该有一个值。因此,Erich的解决方案在Excel和Python两方面都很干净。 - DevLounge
然后,在Python端,您只需使用defaultdict(dict)的嵌套结构。 - DevLounge

0
如果电子表格在此解决方案中是必需的,那么层次结构可以通过Excel侧的缩进(行开头的空单元格)表示,每个节点/叶子一个行。在Python侧,可以将它们解析为树形结构(当然,需要过滤掉空行和一些其他异常)。节点类型可以在自己的列中指定。例如,它甚至可以是第一个非空单元格。
我想,层次级别有限(比如最多8级),否则Excel根本不是一个好主意。
此外,还有一个名为openpyxl的库,可以帮助直接读取Excel文件,而无需用户将其转换为CSV(它增加了整体方法的可用性)。
另一种方法是在第一个单元格中放置级别编号。该数字不应增加2或更多。
另一种方法是为每个节点使用一些ID,并且每个节点叶子都需要指定父ID。但这不太用户友好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接