สมมติว่าฉันมีไฟล์ txt ต่อไปนี้:
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