2

对 python 完全陌生,我在使用 2.4 版时遇到问题

我有一个包含 3 列的文本文件,它们是制表符分隔的,不是单个制表符,而是 9 个制表符。1000 行文件例如:

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

我需要做的是按第 3 列( 00000000000000005062 )对所有内容进行排序。

使用 csv 阅读器是处理此问题的最佳方式吗?我如何让它来处理我的文本文件使用 9 个选项卡来分隔每一列的事实。我发现的大多数其他东西与 python 2.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))

先试试这个!(根据评论和文档keypython2.4 支持,但 python2.3 不支持)。 operator.itemgetter也是“python2.4 中的新内容”,itemgetter(2)相当于lambda x:x[2]或更详细:

def get2(x):
    return x[2]

但我认为您可能需要依赖cmp与真正旧的 python 版本的兼容性(注意,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 回答