簡體   English   中英

為文本文件中的每一行創建一個新列表?

[英]Creating a new list for every line in a text file?

因此,我正在嘗試創建一個程序,該程序將以多種方式(字母,數字順序等)對文本文件的內容進行排序。 為此,我需要為文本文件中的每個項目創建一個新列表。 說我的文本文件如下所示:

Isaac 2 5 3  
Aaron 9 8 10  

一種排序方法(字母順序,僅顯示最高分)的輸出應如下所示:

Aaron 10  
Isaac 5  

為此,我需要為文本文件中的每一行創建一個新列表,這樣我可以以多種方式對它進行排序,並且可以刪除任何不相關的信息,即得分較低。 我努力了:

mylist = fileName.split("\n")  

乃至:

mylist = fileName.readlines()  

但是這些只是創建一個大列表,每行都有一個新項目,而不是每行一個單獨的列表。 是否可以用這兩種方法或我從未聽說過的另一種方法來執行此操作?

在第一次迭代中,假設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]]

使用Pandas ,這是一種方法。

注意:我是熊貓的菜鳥。

制作了一個數據文件:

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

然后在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]]

簡化此建議將不勝感激。

好的,在嘗試了提供的答案之后,我發現了一種愚蠢的簡單方法來獲取所需信息:

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

輸出如下:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM