我有一個包含二進制表的60GB FITS文件。我想一次讀取(並處理)這個表一行/入口/行/塊*。使用pyfits一次讀取FITS二進制表格
(*我不能確定正確的命名)
我使用pyfits什麼,我想這樣做可以歸結爲簡單:
import pyfits
hdulist = = pyfits.open("file.fits")
# the binary table has to be in the 2nd extension
# hence it is in hdulist[1]
n_entries = hdulist[1].header['NAXIS2']
for i in xrange(n_entries):
entry = hdulist[1].data[i] # I am confused what happens at this step
# now do stuff with the values in entry
# .....
變量entry
是<class 'pyfits.fitsrec.FITS_record'>
型和長度等於二進制表中的列數。然而,看起來發生的是二進制表的整個被讀入該行的內存中:entry = hdulist[1].data[i]
。
我已經查看了pyfits文檔,但我無法找到任何方法,似乎是通過表條目(或一次一小組條目)從表條目的二進制表擴展名中讀取數據。我不想從表中選擇某些條目,只是簡單地按順序掃描它們。
我想我的問題是:
0)的結果是什麼hdulist[1].data[i]
一步發生了什麼?爲什麼一切都被讀入內存? (有沒有辦法解決這個問題?)
1)我錯過了什麼,pyfits能夠實際上做我想要的嗎?
2)那裏有另外一個python庫嗎?如果不是,我可以用不同的二進制(或其他壓縮/非ascii)格式(不是FITS)重新寫入數據,並找到一些其他的python庫或模塊做我想要的?
謝謝!我下載並安裝了[fitsio](https://pypi.python.org/pypi/fitsio/0.9.3) ,這確實做了我想要的。上面的代碼變爲: '進口fitsio' '文件名= 「file.fits」' 'H = fitsio.read_header(文件名,電話分機= 1)'' n_entries = H [ 「NAXIS2」]' 'fits = fitsio.FITS(filename,iter_row_buffer = 1000)' '我在xrange(n_entries):' 'entry = fits [1] [i] – alexabate