簡體   English   中英

在數據文件中拆分行

[英]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.

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