Предположим, у меня есть следующий текстовый файл:
0.0163934
6
7.52438e+09
2147483648
6.3002e-06 6.31527e-08 0 0 6 0 0 4.68498e-06 0.00638412 12.6688
6.33438e-06 0 5.99588e-09 0 0 0 0 4.70195e-06 0 12.876
6.36874e-06 0 6.09398e-09 0 0 0 0 4.71894e-06 0 13.0867
6.40329e-06 0 6.19369e-09 0 0 0 0 4.73593e-06 0 13.3009
6.43802e-06 0 6.29503e-09 0 0 0 0 4.75294e-06 0 13.5185
6.47295e-06 0 6.39803e-09 0 0 0 0 4.76996e-06 0 13.7397
0.0163934
3
7.52438e+09
2147483648
6.3002e-06 0 5.89935e-09 0 0 0 0 4.68498e-06 0 12.6688
6.33438e-06 0 5.99588e-09 0 0 0 0 4.70195e-06 0 12.876
6.36874e-06 0 6.09398e-09 0 0 0 0 4.71894e-06 0 13.0867
Я хочу прочитать каждую из первых строк как числа с плавающей запятой или целые числа, а затем, в зависимости от второй строки, я хочу прочитать остальные строки как список списков или массив.
На языке IDL мне просто нужно сделать:
openr, 1, fname
readf, 1, Time
readf, 1, Bins
readf, 1, dummy
readf, 1, dummyLong
da1= fltarr(10, Bins)
readf, 1, da1
Таким образом, весь блок чисел хранится в целом числе da1, которое имеет размер: 10 * Bins. (строки и столбцы противоположны, как в питоне)
И затем я могу прочитать следующие строки таким же образом.
В питоне делаю:
Time=float(filen.readline())
Bins=int(filen.readline())
dummy=float(filen.readline())
dummyLong=long(filen.readline())
lines=[filen.readline() for i in range(Bins)]
arra=[[float(x) for x in lines[i].split()] for i in range(len(lines))]
Поэтому мне нужны две строчки кода и сложные итерации, непонятные новичку.
Есть ли способ сделать это, как в IDL, в одном выражении и на pythonic?
Спасибо!
filen.readlines()
не удобен для памяти, аfor line in filen
— да. - person cha0site   schedule 01.02.2013