我的文件格式如下:
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列表没有排序,我可能不得不使列表成为字符串,并将每个列表作为一行写入一个新文件中。
发布于 2015-07-17 04:27:07
我能够通过使用LINE和N=的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)我讨厌人们来到论坛却不跟进,所以这是我的跟进。很抱歉一开始发错了帖子。
https://stackoverflow.com/questions/31435158
复制相似问题