Python根据列值从高到低对文本文件进行排序

2024-06-26 14:36:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常大的文本文件,其中包含以下数据行:

('#DownWithAssad', '1')
('#DownYoTLParty', '1')
('#Download', '8')
('#Download:', '2')
('#Downloads', '2')
('#DownstairsMixtape', '1')
('#DowntonAbbey', '12')
('#DowntonAbbey?', '1')
('#DowntonPBS', '23')
('#Downtonabbey', '1')
('#DowntownAbbey', '1')

这似乎是一个简单的问题,但我想将数据从最高点降到最低点,这样它看起来像:

^{pr2}$

我想我可以去掉括号()并用以下方法拆分数据:

import sys

f = open(sys.argv[1])
for line in f:
    line = str(line)[1 : -1]
    for sect in line.split(','):
        print sect

不过,我不知道该怎么办。在


Tags: 数据infordownloaddownloadssysline文本文件
2条回答

这就是你要做的事情。注意,以这种方式解析行是非常脆弱的(格式错误的行可能会破坏它)

from operator import itemgetter
import sys

result=[]
with open(sys.argv[1]) as f:
    for line in f:
        line = str(line.strip())[1: -1]
        sect1, sect2 = line.split(', ')
        sect1 = sect1[1: -1]
        sect2 = int(sect2[1: -1])
        result.append((sect1, sect2))

for line in sorted(result, key=itemgetter(1), reverse=True):
    print line

更好的解析方法是使用literal_eval或正则表达式。你知道在字符串中出现引号或逗号时有没有特殊处理?在

您可以使用ast.literal_eval轻松解析文本文件:

with open(datafile) as f:
    file_sorted = sorted((ast.literal_eval(x) for x in f),
                         key=lambda z:(int(z[1]),z[0]),
                         reverse=True)

工作原理:

^{pr2}$

相关问题 更多 >