完全是python的新手我在使用2.4版本时遇到了问题
我有一个文本文件,其中包含3个列,它们由制表符分隔,而不是单个选项卡,9个制表符.1000行文件ex:
$1$sda4356:[sgb1_diska5.ldlbat44.libabl]talild_0329_base.rpt talild_0329_base.rpt 00000000000000005062
Run Code Online (Sandbox Code Playgroud)
我需要做的是按列3(00000000000000005062)排序所有内容.
使用csv阅读器是处理这种情况的最佳方法吗?如何处理我的文本文件使用9个选项卡分隔每列的事实.我发现的大多数其他东西都与python 2.4不兼容.
既然你正在使用9个标签,str.split看起来它应该能够正确处理,(但我没有看到任何理由为什么csv会窒息它...):
fobj = open('data.csv')
data = [ x.split() for x in fobj ]
fobj.close() #don't forget to close :)
Run Code Online (Sandbox Code Playgroud)
或者可能:
delim = '\t'*9
data = [ x.split(delim) for x in fobj ]
Run Code Online (Sandbox Code Playgroud)
然后你可以排序.在较新版本的python中,您可以:
from operator import itemgetter
data.sort(key=itemgetter(2))
Run Code Online (Sandbox Code Playgroud)
先试试吧!(根据评论和文档,keypython2.4支持,但不支持python2.3). operator.itemgetter也是"python2.4中的新东西",itemgetter(2)相当于lambda x:x[2]或者更详细:
def get2(x):
return x[2]
Run Code Online (Sandbox Code Playgroud)
但我认为你可能需要依赖于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
Run Code Online (Sandbox Code Playgroud)
然后你会分类:
data.sort(cmp=compare)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1355 次 |
| 最近记录: |