Misalkan saya memiliki file txt berikut:
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
Saya ingin membaca setiap baris pertama sebagai float atau bilangan bulat dan kemudian bergantung pada baris kedua saya ingin membaca baris lainnya sebagai daftar daftar atau array.
Dalam bahasa IDL saya hanya perlu melakukan:
openr, 1, fname
readf, 1, Time
readf, 1, Bins
readf, 1, dummy
readf, 1, dummyLong
da1= fltarr(10, Bins)
readf, 1, da1
Sehingga seluruh blok angka disimpan dalam bilangan bulat da1 yang berukuran: 10*Bins. (baris dan kolom adalah kebalikan dari python)
Dan kemudian saya bisa membaca baris berikut dengan cara yang sama.
Dengan python yang saya lakukan:
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))]
Jadi saya memerlukan dua baris kode dan iterasi rumit yang tidak dapat dimengerti oleh pemula.
Apakah ada cara untuk melakukannya seperti di IDL, dalam satu pernyataan dan pythonic?
Terima kasih!
filen.readlines()
tidak ramah memori, tetapifor line in filen
ramah. - person cha0site   schedule 01.02.2013