2

Pythonはまったく新しいので、バージョン2.4でこれを見つけるのに問題があります

1つのタブではなく9つのタブでタブ区切りされた3つの列を含むテキストファイルがあります。1000行のファイル例:

$1$sda4356:[sgb1_diska5.ldlbat44.libabl]talild_0329_base.rpt                                talild_0329_base.rpt                                                                      00000000000000005062

私がする必要があるのは、列3(00000000000000005062)ですべてを並べ替えることです。

これを処理するには、csvリーダーを使用するのが最善の方法ですか?テキストファイルが各列を区切るために9つのタブを使用しているという事実を処理するにはどうすればよいですか。私が見つけた他のほとんどのものは、Python2.4と互換性がありません。

4

1 に答える 1

5

あなたは9つのタブを使用しているので、str.splitこれを適切に処理できるはずです(しかし、それを詰まらせる理由はわかりませんcsv...):

fobj = open('data.csv')
data = [ x.split() for x in fobj ]
fobj.close()  #don't forget to close :)

またはおそらく:

delim = '\t'*9
data = [ x.split(delim) for x in fobj ]

次に、それを並べ替えることができます。新しいバージョンの python では、次のようにします。

from operator import itemgetter
data.sort(key=itemgetter(2))

まずはこれを試してみてください!(コメントとドキュメントによるとkey、python2.4 ではサポートされていますが、python2.3 ではサポートされていません)。 operator.itemgetterまた、「python2.4 の新機能」であり、itemgetter(2)同等lambda x:x[2]またはより詳細です。

def get2(x):
    return x[2]

しかし、本当に古いバージョンの python との互換性に依存する必要があるかもしれないと思いますcmp(注、python3 はもはやサポートしていませんcmp):

def compare(x1,x2):
    if x1[2] > x2[2]:
       return 1
    elif x1[2] < x2[2]:
       return -1
    else:
       return 0

そして、次のように並べ替えます。

data.sort(cmp=compare)
于 2013-01-15T16:34:25.980 に答える