首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从立方体格式的行文件生成相邻节点对列表(使用Python)

从立方体格式的行文件生成相邻节点对列表(使用Python)
EN

Stack Overflow用户
提问于 2015-07-14 03:04:47
回答 1查看 61关注 0票数 0

我的文件格式如下:

代码语言:javascript
复制
LINE NAME="FirstLine", MODE=15, ONEWAY=T, HEADWAY[1]=20, HEADWAY[2]=30,
     HEADWAY[3]=20, HEADWAY[4]=30, HEADWAY[5]=30, VEHICLETYPE=2,
     XYSPEED=20, N=-20609, -22042, -20600, 20601, 22839, 22838,
     -20602, -20607, -20606, -20605, -20896, -20895, -20897, 20898,
     -20899, -20905, -20906, -20910, 21104, -20911, -20912, 25065,
     -21375
LINE NAME="SecondLine", MODE=15, ONEWAY=T, HEADWAY[1]=25, HEADWAY[2]=35,
[ETC]

我需要提取N=后面的数字列表(每个N=对应一个列表),去掉减号,并将每对相邻的数字(例如[[20609, 22042], [22042, 20600]])附加到一个对列表中。Python-noob me的主要难点是作为第一步提取数字列表(即,使每个N=后面的内容成为自己的列表)。

如果Python列表没有排序,我可能不得不使列表成为字符串,并将每个列表作为一行写入一个新文件中。

EN

回答 1

Stack Overflow用户

发布于 2015-07-17 04:27:07

我能够通过使用LINEN=的find方法来解决这个问题。查找LINE将增加一个索引,并在字典中创建一个与该索引对应的新条目。查找N=将在字典中给出该项的“定义”--一个只有一个字符串元素的列表。然后,对于字典中的每个条目,我去掉了空格,将-替换为'' (即nothing),并使用带有参数','的split方法来分割列表。

然后,我将这些列表Li[:-1]压缩到Li[1:]中,以获得我需要的相邻节点对。

可能没有人会发现这很有用(我知道它可能很复杂),但下面是我的代码:

代码语言:javascript
复制
with open(path + filename) as f:
    i = 0
    L = {}
    for line in f:
        existL = line.find("LINE")
        existN = line.find("N=")

        if existL > -1:
            i = i + 1
            L["Line" + str(i)] = []

        if existN > -1:
            go = 0
            while go == 0:
                txtNodes = line[line.rfind('=')+1:].strip()
                nodes = txtNodes.split(',')

                for node in nodes:
                    node = node.strip()
                    node = node.replace('-','')
                    if len(node) > 3:
                        L["Line" + str(i)].append(node)

                try:
                    line = f.next()
                    if line.find("LINE") > -1:
                        go = go + 1
                        i = i + 1
                        L["Line" + str(i)] = []
                except:
                    go = go + 1

Li = []
while i > 1:
    L1 = L["Line" + str(i)][:-1]
    L2 = L["Line" + str(i)][1:]
    Lx = zip(L1,L2)

    i = i-1
    Li.extend(Lx)

我讨厌人们来到论坛却不跟进,所以这是我的跟进。很抱歉一开始发错了帖子。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31435158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档