Как я могу создать список списков из файла, где каждый список будет иметь более одной строки? - PullRequest
1 голос
/ 16 октября 2019

у меня есть этот большой файл,

E01 2019 07 07 23 50 00-6.423263694160e-04-8.043343768804e-12 0.000000000000e+00
     1.500000000000e+01-8.437500000000e+00 2.970480875309e-09-8.238142721997e-02
    -3.967434167862e-07 1.850683474913e-04 6.241723895073e-06 5.440598007202e+03
     8.580000000000e+04 7.823109626770e-08 1.189137422632e-01 6.519258022308e-08
     9.876445222158e-01 2.184375000000e+02-3.055987605922e+00-5.639163465222e-09
    -4.485901141503e-10 5.170000000000e+02 2.061000000000e+03 0.000000000000e+00
     3.120000000000e+00 0.000000000000e+00-1.862645149231e-09-2.328306436539e-09
     9.999000000000e+08                                                         
E01 2019 07 07 23 50 00-6.423254380934e-04-8.043343768804e-12 0.000000000000e+00
     1.500000000000e+01-8.437500000000e+00 2.970480875309e-09-8.238142721997e-02
    -3.967434167862e-07 1.850683474913e-04 6.241723895073e-06 5.440598007202e+03
     8.580000000000e+04 7.823109626770e-08 1.189137422632e-01 6.519258022308e-08
     9.876445222158e-01 2.184375000000e+02-3.055987605922e+00-5.639163465222e-09
    -4.485901141503e-10 2.580000000000e+02 2.061000000000e+03 0.000000000000e+00
     3.120000000000e+00 0.000000000000e+00-1.862645149231e-09 0.000000000000e+00
     9.999000000000e+08...

, и мне нужно создать список списков, где каждый список начинается с 'E01' и заканчивается последним числом до начала следующего 'E01', что-то вроде этого

[E01, 2019, 07, ... 2.328306436539e-09, 9.999000000000e+08]

Все, что я знаю, это как сделать каждую строку в отдельных списках (.readlines ()), но мой файл слишком велик для этого метода.

1 Ответ

1 голос
/ 16 октября 2019

Простым способом:

with open('yourfile.txt') as f:
    res = []
    for line in f:
        if line.startswith('E'):
            res.append([])
        res[-1].extend(line.split())

print(res)

Подробности:

  • line.split() - разбить строку на список строк по пробелам (символам)
  • res[-1].extend(line.split()) - расширить последний подсписок (родительского списка) с результатом разделения (шаг выше)

Пример вывода (для 2 секций):

[['E01', '2019', '07', '07', '23', '50', '00-6.423263694160e-04-8.043343768804e-12', '0.000000000000e+00', '1.500000000000e+01-8.437500000000e+00', '2.970480875309e-09-8.238142721997e-02', '-3.967434167862e-07', '1.850683474913e-04', '6.241723895073e-06', '5.440598007202e+03', '8.580000000000e+04', '7.823109626770e-08', '1.189137422632e-01', '6.519258022308e-08', '9.876445222158e-01', '2.184375000000e+02-3.055987605922e+00-5.639163465222e-09', '-4.485901141503e-10', '5.170000000000e+02', '2.061000000000e+03', '0.000000000000e+00', '3.120000000000e+00', '0.000000000000e+00-1.862645149231e-09-2.328306436539e-09', '9.999000000000e+08'],
 ['E01', '2019', '07', '07', '23', '50', '00-6.423254380934e-04-8.043343768804e-12', '0.000000000000e+00', '1.500000000000e+01-8.437500000000e+00', '2.970480875309e-09-8.238142721997e-02', '-3.967434167862e-07', '1.850683474913e-04', '6.241723895073e-06', '5.440598007202e+03', '8.580000000000e+04', '7.823109626770e-08', '1.189137422632e-01', '6.519258022308e-08', '9.876445222158e-01', '2.184375000000e+02-3.055987605922e+00-5.639163465222e-09', '-4.485901141503e-10', '2.580000000000e+02', '2.061000000000e+03', '0.000000000000e+00', '3.120000000000e+00', '0.000000000000e+00-1.862645149231e-09', '0.000000000000e+00', '9.999000000000e+08']]
...