繁体   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