2016-08-20 58 views
-1

我有一個大的文本文件,我試圖根據200的間隔對第一列進行分組。在下面的示例代碼中,前四行將在一個組中,接下來的三行在另一組中,最後一行在一個單獨的組中。我的想法是將它們分組爲基於for循環的條件,增加200,但一直沒有能夠得到它的工作。基於範圍python的組行行

000008 34.576 -87.234 
000025 34.825 -87.935 
00.935 -86.344 
000154 34.395 -86.903 
000234 35.219 -86.945 
000322 34.240 -86.527 
000359 34.893 -87.573 
000412 35.291 -87.392 

一旦我把它們分組,我想檢查看最後兩列是否在指定的範圍內。如果是,則將這些行寫入新的輸出文件。任何幫助,將不勝感激!

回答

1

您可以通過200分的價值得到密鑰groupby

>>> rows = '''000008 34.576 -87.234 
000025 34.825 -87.935 
00.935 -86.344 
000154 34.395 -86.903 
000234 35.219 -86.945 
000322 34.240 -86.527 
000359 34.893 -87.573 
000412 35.291 -87.392'''.splitlines() 

>>> from itertools import groupby 
>>> for _, group in groupby(rows, key=lambda row: int(row.split()[0]) // 200): 
     print(list(group)) 

['000008 34.576 -87.234', '000025 34.825 -87.935', '00.935 -86.344', '000154 34.395 -86.903'] 
['000234 35.219 -86.945', '000322 34.240 -86.527', '000359 34.893 -87.573'] 
['000412 35.291 -87.392'] 

如果數字總是有六位數字,你可以使用int(row[:6]) // 200代替。

+0

我以前沒有使用過groupby,那麼您將如何訪問第二列和第三列呢?我試圖查找關於該功能的一些背景信息,但尚未找到訪問列的任何內容。 – V22

+0

@ V22在我的循環內部,'list(group)'給出了一組中的行列表,如我的答案底部的輸出所示。你看到三組嗎?然後,您可以隨意處理每個組的行列表,而無需與「groupby」做任何事情,這隻用於實現分組。爲了解析「列」,你可以'.split()'每行並應用'int'或'float'來將字符串轉換爲數字。 –

+0

我確實得到了這三個組,但是當我嘗試實現.split()命令時,我一直在收到「'itertools._grouper」對象沒有屬性'split'「。 – V22