无法多次打开具有灾难性的远程FITS

时间:2019-10-04 08:10:26

标签: python boto3 astropy astronomy

我正在编写一个处理天文FITS文件的程序包。我想允许文件位于本地或云中。对于本地文件,我可以fits.getdata()fits.open()任意多次,但对于远程文件,必须先关闭文件,然后才能再次打开它。

这是问题的说明性示例:

>>> file
<S3Boto3StorageFile: filename.fits.fz>

>>> from astropy.io import fits                                                                                                                                                                             
>>> hdul = fits.open(file)                                                                                            
>>> hdul.info() 

Filename: filename.fits.fz
No.    Name      Ver    Type      Cards   Dimensions   Format
  0  PRIMARY       1 PrimaryHDU       8   ()      
  1  SCI           1 CompImageHDU    268   (3054, 2042)   float32   
  2  CAT           1 BinTableHDU    157   259R x 37C   [D, D, D, D, K, K, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, K, D, D]   
  3  BPM           1 CompImageHDU     10   (3054, 2042)   uint8  

>>> fits.getdata(file,header=True) 

OSError: Empty or corrupt FITS file

>>> file.close()
>>> hdul = fits.open(file)
>>> hdul.info()

Filename: filename.fits.fz
No.    Name      Ver    Type      Cards   Dimensions   Format
  0  PRIMARY       1 PrimaryHDU       8   ()      
  1  SCI           1 CompImageHDU    268   (3054, 2042)   float32   
  2  CAT           1 BinTableHDU    157   259R x 37C   [D, D, D, D, K, K, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, D, K, D, D]   
  3  BPM           1 CompImageHDU     10   (3054, 2042)   uint8 

对于远程文件,我需要先执行file.close(),然后才能再次打开它,而对于本地文件,则不需要。

当前,我必须检查输入file是否类似于文件(因此我将其关闭)或Path或str(当我不关闭它时)。必须执行此检查感觉有点麻烦。

如果这是预期的行为,我想知道为什么它对于本地和远程文件(甚至是类似文件的对象和非对象)不同。

0 个答案:

没有答案