使用带有整数的列对文本文件的行进行排序-

0 python sorting numpy

我需要使用其中一列(第一列)的整数值对文本文件的行进行排序。文件(coord.xyz)如下所示

9  1  -1.379785  0.195902  -1.197553
5  4  -0.303549  0.242253  -0.810244
2  2  -0.582923  1.208243  1.566588
3  3  -0.494556  0.028594  0.763130
4  1  -0.749005  -1.209878  1.358057
1  1  -0.883509  1.111866  2.882335
6  1  -1.005786  -1.278486  2.719391
7  5  -1.128898  -0.088124  3.508042
10  1  -0.253070  -0.289294  5.424662
8  1  -1.243879  -0.217228  5.247915
Run Code Online (Sandbox Code Playgroud)

我用了代码

import numpy as np

with open("coord.xyz") as inf:
    data = []
    for line in inf:
        line = line.split()
        if len(line)==5:
            data.append(line)
f_h = file('sorted.dat','a')
m = sorted(data, key=lambda data_entry: data_entry[0])
np.savetxt(f_h, m, fmt='%s', delimiter='    ')
f_h.close()
Run Code Online (Sandbox Code Playgroud)

sorted.dat文件的结果是这样的

1    1    -0.883509    1.111866    2.882335
10    1    -0.253070    -0.289294    5.424662
2    2    -0.582923    1.208243    1.566588
3    3    -0.494556    0.028594    0.763130
4    1    -0.749005    -1.209878    1.358057
5    4    -0.303549    0.242253    -0.810244
6    1    -1.005786    -1.278486    2.719391
7    5    -1.128898    -0.088124    3.508042
8    1    -1.243879    -0.217228    5.247915
9    1    -1.379785    0.195902    -1.197553
Run Code Online (Sandbox Code Playgroud)

10被认为是比较小的值2。有人可以帮我解决这个问题吗?

Fra*_*ono 5

您写的是将行作为字符串排序。按字母顺序10在2之前。

尝试将lambda编写为:

m = sorted(data, key=lambda data_entry: int(data_entry[0]))
Run Code Online (Sandbox Code Playgroud)