为文本文件中的每一行创建一个新列表?

时间:2015-05-22 08:44:50

标签: python list sorting text-files

所以我正在尝试创建一个程序,它将以多种方式(字母顺序,数字顺序等)对文本文件的内容进行排序。为此,我需要为文本文件中的每个项目创建一个新列表。说我的文本文件如下所示:

Isaac 2 5 3  
Aaron 9 8 10  

其中一种排序方法的输出(按字母顺序排列,只显示最高分数)应如下所示:

Aaron 10  
Isaac 5  

要做到这一点,我需要为文本文件中的每一行创建一个新列表,这样我可以通过多种方式对其进行排序,我可以删除任何不相关的信息,即较低的分数。我试过了:

mylist = fileName.split("\n")  

甚至:

mylist = fileName.readlines()  

但是这些只是为每一行创建一个包含新项目的大列表,而不是每行的单个列表。有没有办法用这两种方法或我没有听说过的另一种方法来做到这一点?

3 个答案:

答案 0 :(得分:3)

在第一次迭代中,假设f是文件对象,您只需执行

即可
mylist = [line.split() for line in f]

这为您提供了一个列表,如

[["Isaac", "2", "5", "3"], ["Aaron", "9", "8", "10"]]

但是,如果要对数字进行排序,首先需要将字符串转换为整数(或浮点数?),因为"9" > "10"。如何做到这一点取决于数据的结构。

假设你的第一个元素是一个名字,其后的所有其他元素都是整数,你可以使用

mylist = []
for line in f:
    items = line.split()
    mylist.append([items[0]] + [int(item) for item in items[1:]])

结果:

[['Isaac', 2, 5, 3], ['Aaron', 9, 8, 10]]

答案 1 :(得分:0)

使用Pandas,这是一种方法。

N.B。:我是一只大熊猫。

制作数据文件:

$ cat data.txt
Isaac 2 5 3
Aaron 9 8 10

然后将pandas用于ipython:

In [3]: import pandas as pd

In [4]: df = pd.read_table('data.txt', delim_whitespace=True, header=None)

In [5]: df
Out[5]: 
       0  1  2   3
0  Isaac  2  5   3
1  Aaron  9  8  10

In [6]: newdf = df.sort(0).apply(lambda x: pd.Series([x[0],x[1:].max()]),axis=1)

In [7]: newdf
Out[7]: 
       0   1
1  Aaron  10
0  Isaac   5

In [8]: print(newdf.to_string(header=False, index=False))
 Aaron  10
 Isaac   5

In [9]: newdf.values
Out[9]: 
array([['Aaron', 10],
       ['Isaac', 5]], dtype=object)

In [10]: newdf.values.tolist()
Out[10]: [['Aaron', 10], ['Isaac', 5]]

非常感谢建议简化这一点。

答案 2 :(得分:0)

好的家伙在试验了答案后我发现了一种愚蠢的简单方法来获得我需要的东西:

for line in file.readlines():  
            items = line.split()  
            items = sorted(items, reverse = True)  
            del items[-2:]    
            print(items)  

输出如下:

['Isaac', '5']  
['Aaron', '9']