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

2024-10-03 11:24:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我的文件格式如下:

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列表没有排序,我可能需要将列表设置为字符串,并将每个字符串作为一行写入新文件中。你知道吗


Tags: 字符串name列表modelineetc数字me
1条回答
网友
1楼 · 发布于 2024-10-03 11:24:46

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

然后我将这些列表Li[:-1]压缩到它们自己Li[1:],以获得所需的相邻节点对。你知道吗

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

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)

我讨厌人们来论坛不跟帖,所以下面是我的跟帖。抱歉,刚开始放错地方了。你知道吗

相关问题 更多 >