Есть более простой способ, есть таблица ссылок, например:
Таблица 1: клиенты, информация о клиенте, бла-бла-бла
Таблица 2: курсы, информация о курсе, бла-бла
Таблица 3: clientid, courseid
Затем выполните JOIN, и вы отправитесь на гонки.
Вот простой подход (не требует RE), который работает для этого конкретного примера. Вам нужно будет сделать это для каждой строки в файле.
>>> '2.459E+08-3.523E+08 4.78E-6-2.344E-06'.replace('-', ' -').replace('E -', 'E-')
>>> '2.459E+08 -3.523E+08 4.78E-6 -2.344E-06'
Объяснение: мы всегда вставляем пробел перед знаком минус, но если знак минус предшествует E, то мы снова удаляем этот пробел.
Эта логика проста для чтения и следования, и она быстрее, чем с использованием регулярного выражения.
Если известно, что источником является файл с фиксированной шириной столбца - почему бы не использовать это:
L = 64 # length of one line
l = 16 # length of one number
with open(filename) as f:
for line in f:
print([float(line[i:i+l]) for i in range(0, L, l)])
# [100436070.5, -14.9785924, 20418483.379999999, 2.676474075e+17]
РЕДАКТИРОВАТЬ:
, если вам не нравится это для точного ввода длины строк и чисел, вы можете позволить им рассчитывать из первой строки, например считая десятичные точки:
n = 0
with open(filename) as f:
for line in f:
if not n:
n = sum(c=='.' for c in line)
L = len(line)
l = L//n
print([float(line[i:i+l]) for i in range(0, L, l)])