1

これまでの私のコード:

from collections import OrderedDict as od
    def load(fileIn, fileOut):
        with open(fileIn+'.txt') as fin, open(fileOut+'.txt', 'w') as fout:
            dict = od()
            for line in fin:
                row = line.split()
                id = int(row[0])
                frame = int(row[2])
                rect = [int(row[3]),int(row[4]),int(row[5]),int(row[6])]
                dict = {frame:[id, rect]}
                fout.writelines(str(dict)+'\n')

テキスト ファイルから読み取り、特定の方法で並べ替え、新しいファイルに書き込みます。別のforループを追加するか、場合によってはさらに 2 つ追加する必要があるので、それを書く前に並べ替えることができます。これが私が苦労している場所です。

より明確にするために、入力と出力の例を次に示します。

入力:

2 109 1 561 1 20 28 1
2 109 2 557 1 24 32 1
2 109 3 557 5 24 32 1
2 109 4 553 5 28 32 1
2 109 5 553 1 36 40 1
239 195 1 101 549 40 28 1
239 195 2 100 549 40 28 1
239 195 3 98 549 40 28 1
239 195 4 91 551 40 28 1
239 195 5 93 549 40 28 1

出力:

 {1: [2, [561, 1, 20, 28]]}
{2: [2, [557, 1, 24, 32]]}
{3: [2, [557, 5, 24, 32]]}
{4: [2, [553, 5, 28, 32]]}
{5: [2, [553, 1, 36, 40]]}
{1: [239, [101, 549, 40, 28]]}
{2: [239, [100, 549, 40, 28]]}
{3: [239, [98, 549, 40, 28]]}
{4: [239, [91, 551, 40, 28]]}
{5: [239, [93, 549, 40, 28]]}

私は、異なる s のすべての値を、それらすべてが共有rectする共通の 1 つのキーの下にグループ化しようとしています。frameしたがって、毎回frame異なるファイルに 1 が 100 回出現する場合、1 つのファイルに100 個の異なるs が含まれるすべてのsが必要です。idrectkeyrect

したがって、その例は次のようになります。

{1:[rect],[rect],[rect],[rect],[rect],[rect],[rect],[rect],[rect]}
{2:[rect],[rect],[rect],[rect],[rect],[rect],[rect],[rect],[rect]}
{3:[rect],[rect],[rect],[rect],[rect],[rect],[rect],[rect],[rect]}

frame 1次に、あるファイルとframe 1別のファイルを比較できます。

4

2 に答える 2

2

あなたの辞書の使い方は私には正しくないようです。

dict = {frame:[id, rect]}
fout.writelines(str(dict)+'\n')

これらの行は、すべてのループで辞書を上書きするため、辞書には 1 つのペアしかありません。 key : value次に、これを出力ファイルに直接書き込みます。並べ替えやグループ化はまったくありません。

あなたが望むのは(私があなたを正しく理解していれば)、キーと四角形のリストを値とする1つの大きな辞書です。何かのようなもの:frame

frame | rects
  1   | [rect1, rect2]
  2   | [rect3, rect4, rect5]

次に、1 つの dict を作成する必要があります。ループでは、フレームにマップされた値を取得する必要があります ( dict[frame])。そのようなキーがまだない場合は、rect最初の要素として新しいリストを作成します。フレームにマップされたリストが既にある場合は、それに追加する必要がありますrect

最後に、辞書を反復処理して出力ファイルに書き込むことができます。

私はあなたを正しく理解したことを願っています。

于 2013-06-01T09:27:20.600 に答える