将行分组在一个文件中

时间:2015-03-09 19:18:13

标签: python

我有这样的文件,我想用{}中包含的字符串对其进行排序,但我需要将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)。

3 个答案:

答案 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]))