0

我有具有三个不同定界符的数据(如下)(第一个对数字有一个空格,第二个对数字有 3 个空格,最后一列是一个空格,然后是一个制表符对数字),我希望能够生成一个包含每列的顺序值的列表。

 8000.5   16745     0.1257
 8001.0   16745     0.1242
 8001.5   16745     0.1565
 8002.0   16745     0.1595
 8002.5   16745     0.1093
 8003.0   16745     0.1644

我用 re 尝试了一些东西。在转换为字符串以查看是否可以以这种方式解析它之后,但是转换似乎有点冗长,我想知道是否有人知道更快的方法。理想的输出是

list 1 = [8000.5, 8001.0, 8001.5 ...]
list 2 = [16745, 16745, 16745, ...]
list 3 = [0.1257, 0.1242, 0.1565, ...]

谢谢!

4

4 回答 4

1

只需使用.split(); 它会占用任意数量的空格并在其上拆分(完全忽略前导和尾随空格):

>>> ex = ' 8000.5   16745     0.1257'
>>> ex.split()
['8000.5', '16745', '0.1257']

如果您需要浮点数而不是字符串,只需float()使用以下命令应用于每个值map

>>> ex = ' 8000.5   16745     0.1257'
>>> map(float, ex.split())
[8000.5, 16745.0, 0.1257]
于 2012-05-29T16:25:04.810 回答
1

采用split()

strs = """ 8000.5   16745     0.1257
 8001.0   16745     0.1242
 8001.5   16745     0.1565
 8002.0   16745     0.1595
 8002.5   16745     0.1093
 8003.0   16745     0.1644"""

list_col= map(list,zip(*(map(float,x.split()) for x in strs.split('\n'))))

print(list(list_col))

输出:列列表的列表

[[8000.5, 8001.0, 8001.5, 8002.0, 8002.5, 8003.0], [16745.0, 16745.0, 16745.0, 16745.0, 16745.0, 16745.0], [0.1257, 0.1242, 0.1565, 0.1595, 0.1093, 0.1644]]
于 2012-05-29T16:27:11.263 回答
0
txt = """ 8000.5   16745     0.1257
 8001.0   16745     0.1242
 8001.5   16745     0.1565
 8002.0   16745     0.1595
 8002.5   16745     0.1093
 8003.0   16745     0.1644 """

data = zip(*((float(s) for s in row.split()) for row in txt.split('\n')))

结果是

[(8000.5, 8001.0, 8001.5, 8002.0, 8002.5, 8003.0),
 (16745.0, 16745.0, 16745.0, 16745.0, 16745.0, 16745.0),
 (0.1257, 0.1242, 0.1565, 0.1595, 0.1093, 0.1644)]
于 2012-05-29T16:29:02.590 回答
0

还有另一种方法(s是初始字符串):

>>> [map(float, col) for col in zip(*map(str.split, s.splitlines()))]
[[8000.5, 8001.0, 8001.5, 8002.0, 8002.5, 8003.0],
 [16745.0, 16745.0, 16745.0, 16745.0, 16745.0, 16745.0],
 [0.1257, 0.1242, 0.1565, 0.1595, 0.1093, 0.1644]]
于 2012-05-29T17:19:05.183 回答