【发布时间】:2015-11-29 00:38:53
【问题描述】:
我有一个相对较小的问题,但我无法继续解决它。我有一个包含图表信息的文本文件,结构如下:
- 第一行包含节点数
- 空行用于分隔
- 节点信息如下,每个块之间用空行分隔
- 块包含节点 id 一行一行,第二行键入,然后是有关边的信息
- 有两种类型的边,上边和下边,节点类型后面的第一个数字表示“上”边的数量,它们的 ID 紧随其后(如果该数字为 0,则不存在“上”边并且下一个数字表示“向下”边缘)
- “向下”边缘也是如此,它们的数量和它们的 ID 在下面一行中
所以,有两个节点的样本数据是:
3
1
1
2
2 3
0
2
1
0
2
1 3
3
2
1
1
1
2
因此,节点 1 具有类型 1、两个向上边缘、2 和 3,并且没有向下边缘。 节点 2 具有类型 1、零上边和 2 个下边,即 1 和 3 节点 3 有类型 2,一个上边,1,和 1 个下边,2。
人类可以清楚地读取此信息,但我在编写解析器以获取此信息并将其以可用形式存储时遇到问题。
我已经写了一个示例代码:
f = open('C:\\data', 'r')
lines = f.readlines()
num_of_nodes = lines[0]
nodes = {}
counter = 0
skip_next = False
for line in lines[1:]:
new = False
left = False
right = False
if line == "\n":
counter += 1
nodes[counter] = []
new = True
continue
nodes[counter].append(line.replace("\n", ""))
这让我得到了每个节点的信息拆分。我想要一个像字典这样的东西,它可以保存 ID,每个的上下邻居(如果没有可用的,则为 False)。我想我现在可以再次解析这个节点列表并单独执行每个节点,但我想知道我是否可以修改这个循环,我必须首先很好地做到这一点。
【问题讨论】:
-
您对
clearly readable by human的定义与我的不同,但我正在考虑解决您的问题 -
哈哈,好吧,我这辈子肯定读过一些更易读的东西,但我想说的是数据结构是“定义的”,意思是当我看数字的序列时,我可以很容易地在我的脑海中表示,节点ID,它的类型和每一侧的邻居(如果有的话)。这个子句,“如果它有它们”,似乎是我无法在代码中描述的关键部分。
-
你能考虑给你的问题一个比“使用 Python 解析文本文件”更模糊的标题吗?特定于您尝试读取的数据的内容。
-
您能提供您要查找的字典的大纲吗?
-
@puredevotion 像这样的节点 = { node_id: {ups: [], downs:[]} 或该方法中的东西。