0

最初の列のIDに基づいて、タブ区切りファイルの2番目の列の値を組み合わせる必要があります。例を以下に示します。これを行うための最速の方法は何ですか。forループを使用して、各行を通過してそれを行うことができますが、私が気付いていない、それを行うための賢い方法があると確信しています。

596230  Other postop infection
596230  Disseminated candidiasis
596230  Int inf clstrdium dfcile
596230  Pressure ulcer, site NOS
2846079 Schizophrenia NOS-unspec
7800713 CHF NOS
7800713 Chr airway obstruct NEC
7800713 Polymyalgia rheumatica
7800713 DMII wo cmp nt st uncntr

の中へ

596230  Other postop infection, Disseminated candidiasis, Int inf clstrdium dfcile, Pressure ulcer, site NOS
2846079 Schizophrenia NOS-unspec
7800713 CHF NOS, Chr airway obstruct NEC, Polymyalgia rheumatica, DMII wo cmp nt st uncntr
4

3 に答える 3

2

ファイルにテキストがあると仮定します。

from collections import defaultdict
items = defaultdict(list)
with open("myfile.txt") as infile:
    for line in file:
        id, text = line.rstrip().split("\t")
        items[id].append(text)
for id in items:
    print id + "\t" + ", ".join(items[id])

これは、の元の順序を保持しませんidが、テキストの順序は保持します。

于 2012-10-05T13:14:30.783 に答える
1

それらがすでにソートされている場合はitertools.groupby()、分割行で使用してそれらをまとめることができます。ソートされていない場合は、最初にソートします。

于 2012-10-05T13:11:29.367 に答える
1

コンマ以外の文字 (タブ、 など) をセパレーターとして使用するように設定できるため、 Python csv モジュールをファイルの解析に使用することも検討してください。\t基本的な例は次のようなものです。

import csv
with open('myfile', 'rb') as f:
    reader = csv.reader(f, delimiter='\t', quoting=csv.QUOTE_NONE)
    for row in reader:
        print row

そこから、すでに提案されているオプションのいずれかを使用して、同じ番号を持つすべてのアイテムをグループ化できます。

于 2012-10-05T14:11:28.067 に答える