[英]Split line in data file
我正在努力在我的數據文件中拆分行。 以下是幾行示例:
1:0 2:120
1:1 2:131
1:2 2:26
1:3 2:568
1:4 2:176
1:5 2:28 3:549
1:6 2:17
1:7 2:6 3:217 4:401 5:636
1:8 2:139
我想拆分它以獲得每個值...也許以數組的形式:
((1, 2) , (0, 120))
((1, 2) , (1, 131))
...
((1, 2, 3, 4, 5) , (7, 6, 217, 401, 636))
意味着對於每一行,數組可以具有不同的維度。 我試圖分兩步拆分它,但它不起作用。
inf = open("datafile.txt", 'r')
for line in inf:
line.split()
for x in line.split():
x.split(':',1)
您可以使用zip
函數對兩個列表的元素進行分組。
with open("Input.txt") as inf:
for line in inf:
print zip(*map(lambda x: map(int, x.split(":")), line.split()))
產量
[(1, 2), (0, 120)]
[(1, 2), (1, 131)]
[(1, 2), (2, 26)]
[(1, 2), (3, 568)]
[(1, 2), (4, 176)]
[(1, 2, 3), (5, 28, 549)]
[(1, 2), (6, 17)]
[(1, 2, 3, 4, 5), (7, 6, 217, 401, 636)]
[(1, 2), (8, 139)]
建議: with
關鍵字打開文件總是好的,就像我在上面的代碼中所示。 因為,它將負責關閉/釋放資源,即使程序因異常而失敗。
說明:
由於zip
是函數調用,因此首先評估參數。 讓我們來看看*
。 map(lambda x: map(int, x.split(":")), line.split())
,我們將lambda函數lambda x: map(int, x.split(":"))
應用於每個line.split()
返回的字符串列表中的每個元素(以空格字符分割句子並返回列表)。
每個拆分字將作為參數逐個傳遞給lambda函數。 如果我們采用第一種情況,首先將"1:0"
作為x
發送到lambda函數,其中我們基於以下內容進行拆分:
這將給出一個列表["1", "0"]
然后我們將int
函數應用於那將給出[1, 0]
。 因此,在分割所有行並應用lambda之后,結果將如下所示
[[1, 0], [2, 120]]
[[1, 1], [2, 131]]
[[1, 2], [2, 26]]
[[1, 3], [2, 568]]
[[1, 4], [2, 176]]
[[1, 5], [2, 28], [3, 549]]
[[1, 6], [2, 17]]
[[1, 7], [2, 6], [3, 217], [4, 401], [5, 636]]
[[1, 8], [2, 139]]
現在我們在每個列表中都有兩個元素。 記得以后我們決定討論的*
,它將解壓縮列表並將所有元素作為參數傳遞給zip
函數,就像這樣
zip([1, 0], [2, 120])
現在zip
將選擇所有第一個元素並將它們放在一個列表中,然后它將選擇所有第二個元素並將它們放在一個列表中,依此類推。
這就是我們如何得到您期望的答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.