我的文件格式如下:
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=
一个列表),去除减号,并附加每对相邻数字(例如{{ 1}})成对的列表。 Python-noob me的主要部分就是提取数字列表作为第一步(即在每个[[20609, 22042], [22042, 20600]]
之后发布自己的列表)。
如果未对Python列表进行排序,我可能必须创建列表字符串并将每个字符串作为一行写入新文件中。
答案 0 :(得分:0)
我能够通过使用LINE
和N=
的find方法来解决这个问题。查找LINE
会增加索引并在与该索引对应的字典中创建新项。查找N=
将为字典中的该项提供“定义” - 具有单个字符串元素的列表。然后对于字典中的每个项目,我剥离了空格,将-
替换为''
(即没有),并使用带有参数','
的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)
我讨厌当人们来论坛而不跟进时,所以这是我的后续行动。很抱歉最初在错误的地方发帖。