我有这样的文件,我想用{}中包含的字符串对其进行排序,但我需要将3行的一组保持在一起。
bot_out_c_dn_l_za
meta{c_4x8__end} (bot_lq_b_c_dn_l1_za),
meta{c_4x8_end} (bot_lq_b_c_dn_l0_za);
bot_out_c_dn_l_za
meta{c_4x8_gps} (bot_rq_b_c_dn_l1_za),
bot_out__c_dn_r_za
meta{c_4x8_end} (bot_lq_b_c_dn_r1_),
meta{c_4x8_end} (bot_lq_b_c_dn_r0_);
我正在考虑解析文件,查找半列,将3行连接成一个字符串,然后将字符串拆分为kyeword元并按关键字对其进行排序。
当我尝试连接时,它会给我一个错误 -
listoflines={}
i=0
for line in file:
if ";" in line:
listoflines[i]+=line
i=i+1
else:
listoflines[i]+=line
错误是 - IndexError:列表索引超出范围 发生在第一个索引(i = 0)。
答案 0 :(得分:2)
你需要确保你的字词存在于你的字典中才能添加到它
listoflines={}
i=0
for line in file:
if ";" in line:
try:
listoflines[i]+=line
except IndexError:
listoflines[i]=line
i=i+1
else:
try:
listoflines[i]+=line
except IndexError:
listoflines[i] = line
你也可以大大缩短这个
listoflines={}
i=0
for line in file:
try:
listoflines[i]+=line
except IndexError:
listoflines[i]=line
if ";" in line:
i = i + 1
或使用defaultdict
from collections import defaultdict
listoflines=defaultdict(str)
i=0
for line in file:
listoflines[i]+=line
if ";" in line:
i = i + 1
答案 1 :(得分:1)
lines = open("temp.txt","r").readlines()
triples = zip(lines[0::3],lines[1::3],lines[2::3])
sorted_lines = map(lambda x: "".join(x), sorted(triples, key=lambda x: x[1]))
print( "".join(sorted_lines) )
答案 2 :(得分:1)
以下按指定的顺序生成一系列行。
import re
import itertools
lines = f.readlines()
order = [x[0] for x in sorted(enumerate(lines[1::3]), key=lambda x: re.match('.*\{(.*)\}.*', x[1]).groups()[0])]
sorted_lines = list(itertools.chain(*[lines[i*3: (i+1)*3] for i in order]))