Удаление пробелов при считывании значений из файла в памяти

К сути вопроса: У меня есть текстовый файл, который имеет большой набор данных класса float. Эти данные в последствии подаются как входные в виде списков, где каждая строка - это отдельный список. Но при считывании данных значений столкнулся с проблемой, что между значениями стоит абсолютно случайное количество пробелов, а решение должно быть универсальным и под другие файлы, в которых так же вылетает случайное количество пробелов. Общее у них - это количество строк и расположение данных, но их формат всегда разный. Идея моего решения была спарсить весь файл в один большой список и затем брать оттуда необходимые мне значения, но вот из-за пробелов не получается сделать это в split(' '), так как они везде стоят в разном количестве. Возникает вопрос: как можно в памяти компьютера привести значения в файле к одному формату не изменяя основной файл? Ниже пример значений из файла (да, там есть отступы даже в начале) :

  345.892    523.746 537.121     485.391
219.452     429.722   927.193 558.012
 635.163    294.143  194.362     949.152

Мне необходимо привести их к одному формату и записать в список, чтобы получилось так (на примере первой строки) :

null_list = [345.892, 523.746, 537.121, 485.391]

И сразу возникает второй вопрос: на сколько правильно форматировать так достаточно большой файл значений в памяти компьютера?


Ответы (2 шт):

Автор решения: Oopss
s='''  345.892    523.746 537.121     485.391
219.452     429.722   927.193 558.012
 635.163    294.143  194.362     949.152'''

print([*map(lambda x:x.strip(), s.split())])

['345.892', '523.746', '537.121', '485.391', '219.452', '429.722', '927.193', '558.012', '635.163', '294.143', '194.362', '949.152']
→ Ссылка
Автор решения: vlados155

Предложу такой вариант:

import re

s = '''
  345.892    523.746 537.121     485.391
219.452     429.722   927.193 558.012
 635.163    294.143  194.362     949.152
'''  # данные, считанные из файла

s = s.strip()  # удаляем пробелы в начале и в конце строки
numbers = [float(n) for n in re.split(r'\s+', s)]  # \s+ - любое количество пробельных символов от 1

Список numbers:

[345.892, 523.746, 537.121, 485.391, 219.452, 429.722, 927.193, 558.012, 635.163, 294.143, 194.362, 949.152]

re.split() использует в качестве разделителя шаблон регулярного выражения '\s+', поэтому сработает с любым количеством пробелов.

→ Ссылка