Я пишу пакет для обработки астрономических файлов 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
(когда я его не закрываю). Мне кажется немного хакерским делать эту проверку.
Если это предполагаемое поведение, мне было интересно, почему он отличается для локальных и удаленных файлов, или, возможно, даже для файловых объектов и не-объектов.