Удаление пробелов при считывании значений из файла в памяти
К сути вопроса: У меня есть текстовый файл, который имеет большой набор данных класса 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 шт):
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']
Предложу такой вариант:
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+', поэтому сработает с любым количеством пробелов.