python中的原始数据管理

Raw number data management in python

我们知道 python 有一个语法系统来识别不同类型的数据,特别是对于数字,这是一个整数:87665,这是一个浮点数:667.03

我的问题是我有以下格式的设备原始数据(示例):

 22.5946120.0000  9.2703108.3784 30.2703 35.4054  4.8378 74.3243
 51.8919 96.4865145.6757 63.7838  6.1892 12.4054 58.1081145.4054
 61.3514 52.1622 16.0000 38.6486 38.1081 75.9459 59.1892  9.8649
 45.6757 38.3784 45.9459 47.0270 51.8919 36.4865  4.6757 42.4324
 58.6486 28.1081 32.9730 58.1081  8.7568 45.1351 59.4595 30.5405

如您所见,它们会在 python 上浮动,每个“数字”需要 8 space 秒,包括点,如下所示:3 spaces 在 dot/dot/4 之前 spaces 在点 之后,所以例如我可以使用数字“0.01”,但在原始数据中它将显示为“--0.01-- ", 或者我可以有 "562.4001", 本来这应该用 Fortran 处理, 但我更喜欢 python.

我试图建立一个处理数据的规则,例如:

in data replace "  " for ", "

作为“数据”是原始数字的字符串(我只是将整个数字的块转换为字符串并像那样处理)但有时 2 个不同的数字之间只有 1 space,有时有根本就没有 space。所以基本上我想 python 了解在那个字符串中,每 8 spaces 是一个新的浮点数,我认为这可以通过一些 slice 命令实现,但我还没有完全理解。 .帮助...

将行拆分为 8 个字符的块。去除每个块周围的空格,然后调用 float() 将它们转换为浮点数。

def line_to_floats(line, width):
    return list(map(float, [line[i:i+width].strip() for i in range(0, len(line), width)]))

text = ''' 22.5946120.0000  9.2703108.3784 30.2703 35.4054  4.8378 74.3243
 51.8919 96.4865145.6757 63.7838  6.1892 12.4054 58.1081145.4054
 61.3514 52.1622 16.0000 38.6486 38.1081 75.9459 59.1892  9.8649
 45.6757 38.3784 45.9459 47.0270 51.8919 36.4865  4.6757 42.4324
 58.6486 28.1081 32.9730 58.1081  8.7568 45.1351 59.4595 30.5405'''
for line in text.split('\n'):
    print(line_to_floats(line, 8))