0

我们知道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个空格,包括点,就像这样:点前3个空格/点/点后4个空格,所以例如我可以有数字“0.01 ” 但在原始数据中它会显示为“--0.01--”,或者我可以有“562.4001”,本来这应该是用 Fortran 处理的,但我更喜欢 python。

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

in data replace "  " for ", "

作为“数据”是原始数字的字符串(我只是将整个数字的块转换为字符串并像那样对待它)但有时两个不同的数字之间只有 1 个空格,有时根本没有空格。所以基本上我想用python来学习在那个字符串中,每8个空格是一个新的浮点数,我认为这可以通过一些切片命令来实现,但我还没有得到它......帮助......

4

1 回答 1

2

将行拆分为 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))
于 2021-01-07T01:31:34.857 回答