Python 解析文本文件并将某些值分组

Python 解析文本文件并将某些值分组,python,python-2.7,Python,Python 2.7,我试图读取一个文本文件并以特定的方式解析它,然后用输出重写该文件 文本文件(输入)如下所示: 2 108 1 561 1 20 28 1 2 108 2 557 1 24 32 1 5 28 1 553 197 20 20 1 5 28 2 552 197 23 21 1 6 23 1 113 393 36 36 1 6 23 2 113 391 39 39 1 每列表示一个特定值,如下所示: [ID] [Length] [Frame] [X] [Y] [W] [H] 例如,这一行: 2 1

我试图读取一个文本文件并以特定的方式解析它,然后用输出重写该文件

文本文件(输入)如下所示:

2 108 1 561 1 20 28 1
2 108 2 557 1 24 32 1
5 28 1 553 197 20 20 1
5 28 2 552 197 23 21 1
6 23 1 113 393 36 36 1
6 23 2 113 391 39 39 1
每列表示一个特定值,如下所示:

[ID] [Length] [Frame] [X] [Y] [W] [H]
例如,这一行:

2 108 1 561 1 20 28 1
实际上是:
ID:2,长度:108,帧:1,X:561,Y:1,W:20,Y:28

最后一个值
1
根本不需要

现在,我是如何做到这一点的:

with open('1.txt') as fin:
    frame_rects = {}
    for row in (map(int, line.split()) for line in fin):
        id, frame, rect = row[0], row[2], row[3:7]
        frame_rects[frame] = (id, rect)
        first_data = ('{} {} {}\n'.format(frame, id, rect))
        print first_data
这将产生以下结果:

1 2 [561, 1, 20, 28]

2 2 [557, 1, 24, 32]

1 5 [553, 197, 20, 20]

2 5 [552, 197, 23, 21]

1 6 [113, 393, 36, 36]

2 6 [113, 391, 39, 39]
这是第一步,但我的预期输出如下:

1 2 [561, 1, 20, 28] 5 [553, 197, 20, 20] 6 [113, 393, 36, 36]
2 2 [557, 1, 24, 32] 5 [552, 197, 23, 21] 6 [113, 391, 39, 39]
1 2 [561, 1, 20, 28] 5 [553, 197, 20, 20] 6 [113, 393, 36, 36]
2 2 [557, 1, 24, 32] 5 [552, 197, 23, 21] 6 [113, 391, 39, 39]
因此,对于每一帧,我都会附加显示在该特定帧中的所有ID及其值

因此在第1帧中,ID2、ID5和ID6各有其自己的值(x、y、w、h)

每个帧关键点都是唯一的,但只要它们实际出现在该帧中,就可以根据需要保存任意多个ID+值

我需要在可能包含数千个文件的文本文件上运行此操作。每帧可容纳约20个不同的ID。我将如何实现预期输出?

执行以下操作:

from collections import defaultdict

with open('1.txt') as fin:
    frame_rects = defaultdict(list)
    for row in (map(int, line.split()) for line in fin):
        id, frame, rect = row[0], row[2], row[3:7]
        frame_rects[frame].append((id, rect))
        # print '{} {} {}'.format(frame, id, rect) # (if you want to sample)

for key, value in frame_rects.items():
    print key, ' '.join([' '.join([str(i) for i in v]) for v in value])
输出:

输出:

defaultdict(<type 'list'>,
{1: [[2, [561, 1, 20, 28]], [5, [553, 197, 20, 20]], [6, [113, 393, 36, 36]]],
 2: [[2, [557, 1, 24, 32]], [5, [552, 197, 23, 21]], [6, [113, 391, 39, 39]]]})
Expected output:
1 2 [561, 1, 20, 28] 5 [553, 197, 20, 20] 6 [113, 393, 36, 36] 
2 2 [557, 1, 24, 32] 5 [552, 197, 23, 21] 6 [113, 391, 39, 39] 
defaultdict(,
{1: [[2, [561, 1, 20, 28]], [5, [553, 197, 20, 20]], [6, [113, 393, 36, 36]]],
2: [[2, [557, 1, 24, 32]], [5, [552, 197, 23, 21]], [6, [113, 391, 39, 39]]]})
预期产出:
1 2 [561, 1, 20, 28] 5 [553, 197, 20, 20] 6 [113, 393, 36, 36] 
2 2 [557, 1, 24, 32] 5 [552, 197, 23, 21] 6 [113, 391, 39, 39] 
defaultdict(<type 'list'>,
{1: [[2, [561, 1, 20, 28]], [5, [553, 197, 20, 20]], [6, [113, 393, 36, 36]]],
 2: [[2, [557, 1, 24, 32]], [5, [552, 197, 23, 21]], [6, [113, 391, 39, 39]]]})
Expected output:
1 2 [561, 1, 20, 28] 5 [553, 197, 20, 20] 6 [113, 393, 36, 36] 
2 2 [557, 1, 24, 32] 5 [552, 197, 23, 21] 6 [113, 391, 39, 39]