Python异常文件排序

标签 python file sorting

我有一个包含以下数据的 txt 文件:

23       1      65      15      19.2
19       2      66      25      25.7
10       3      67      35      16.5
100      4      68      45      10.4
20       5      69      55      6.8
201      6      64      65      9.2

在文件中,每个值使用\t 和下一行的\n 分开。

我想根据每一行的第一个值对这个文件进行排序。 我的预期输出是:

10       3      67      35      16.5
19       2      66      25      25.7
20       5      69      55      6.8
23       1      65      15      19.2
100      4      68      45      10.4
201      6      64      65      9.2

但我得到的实际输出是:

10       3      67      35      16.5
100      4      68      45      10.4
19       2      66      25      25.7
20       5      69      55      6.8
201      6      64      65      9.2
23       1      65      15      19.2

它将值作为字符串,因此不会将整个数字值作为整数。 我尝试解析,但它不起作用。

我的代码:

with open('filename.txt') as fin:
        lines = [line.split() for line in fin]
lines.sort(key=itemgetter(0),reverse=True)

with open('newfile.txt', 'w') as fout:
    for i in lines:
            fout.write('{0}\t\t\t\t\n'.format('\t\t\t '.join(i)))

如果可能请帮忙。

最佳答案

您当前正在比较字符串,您需要比较整数:

lines.sort(key=lambda x:int(x[0]), reverse=True)

字符串是按字典序比较的,所以:

>>> '2' > '100'
True

转换为 int 修复了这个问题:

>>> int('2') > int('100')
False

关于Python异常文件排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22608263/

相关文章:

python - 将经过训练的 Spacy 2 管道迁移到 Spacy 3

python - 图像配准 B 样条 opencv

javascript - Firestore orderBy Timestamp DESC

c# - 最快的安全排序算法实现

python - WXPython:填充列表框的问题

python - f2py -- 防止数组重新排序

java - 文件大小缓存和 Java 中文件大小的高效检索

java - Hybris 重写现有文件

java - java中以二进制模式读取url

java - 建筑物 compareTo : Comparison method violates its general contract