Python 从bz2打开fits文件

Python 从bz2打开fits文件,python,fits,astropy,Python,Fits,Astropy,所以我有一个压缩的fits文件,我读起来是这样的: File = bz2.BZ2File(fname) fits = File.read() 我正在使用astropy.io.fits读取fits文件。目前,我通过api获取.fits.bz2文件,因此我希望能够像hdulist=fits.open(fit) 但它只是抛出了TypeError:必须是没有空字节的编码字符串,而不是str。(我已经通过手动解包并像上面那样读取来检查文件是否良好) 我想我的问题是一般性的:如何将打开的文件传递给另一个函

所以我有一个压缩的fits文件,我读起来是这样的:

File = bz2.BZ2File(fname)
fits = File.read()
我正在使用astropy.io.fits读取fits文件。目前,我通过api获取.fits.bz2文件,因此我希望能够像
hdulist=fits.open(fit)

但它只是抛出了
TypeError:必须是没有空字节的编码字符串,而不是str
。(我已经通过手动解包并像上面那样读取来检查文件是否良好)

我想我的问题是一般性的:如何将打开的文件传递给另一个函数?

从for
astropy
可以找到:

astropy.io.fits.open
将文件名、打开的文件或类似文件的对象作为第一个参数

您试图将内容从文件传递到
astropy
,而不是文件对象本身

要使示例正常工作,您只需将
bz2
返回的file对象传递到astropy,astropy将像处理未压缩文件一样处理它

from astropy.io import fits
import bz2

decompressed_file = bz2.BZ2File("example.fits.bz2")
hdulist = fits.open(decompressed_file)

看起来您正试图将包含文件字节的字符串传递给
fits.open
,这不是正确的用法。此外,当从Python发布异常消息时,您应该发布完整的回溯,而不仅仅是异常消息。“如何将打开的文件传递给另一个函数?”与任何其他变量一样。重要的是,所讨论的函数可以对文件对象执行任何有用的操作。另请参见我刚刚打开的这个问题,因为io.fits不像对文件那样支持文件句柄中的压缩,这似乎很奇怪: