Python 将带有头的文件和编码问题读取到numpy数组中

Python 将带有头的文件和编码问题读取到numpy数组中,python,arrays,numpy,unicode,Python,Arrays,Numpy,Unicode,我有一个文件(如果您想知道,来自Zemax的PSF)如下所示: Listing of FFT PSF Data File : C:\G_Drive\Projects\MSE\Telescope\AAO_designs\MSE_PF_6u_1300-Shan-Nicolas_2.zmx Title: MSE Prime Focus WFC with CLADC Date : 2/9/2018 Configuration 1 of 4 FFT PSF 0.5510 µm at 0.5300, 0

我有一个文件(如果您想知道,来自Zemax的PSF)如下所示:

Listing of FFT PSF Data

File : C:\G_Drive\Projects\MSE\Telescope\AAO_designs\MSE_PF_6u_1300-Shan-Nicolas_2.zmx
Title: MSE Prime Focus WFC with CLADC
Date : 2/9/2018
Configuration 1 of 4

FFT PSF
0.5510 µm at 0.5300, 0.0000 (deg).
Data spacing is 0.300 µm.
Data area is 153.600 µm wide.
Surface: Image (Focal surface)
Reference Coordinates: 2.02066E+02, 0.00000E+00
Pupil grid size: 256 by 256
Image grid size: 512 by 512
Center point is: row 257, column 256
Values are normalized to peak = 1.0

  1.7638E-02      1.7079E-02      1.6531E-02      1.5996E-02      1.5475E-02    ...
所以,它有一个带有文本的标题,我想是需要一些iso-8859-1编码的字符。 在头部之后是512行512个浮点,我想将其导入一个numpy数组

我从这个开始:

data = ascii.read(path_in + files[0], data_start=19, encoding='iso-8859-1')
n = np.array(data)
n.shape
但阵列的形状不正确:

(508,)
我还尝试:

im = np.loadtxt(path_in + files[0], skiprows=19)
但出现以下错误:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb5 in position 211: invalid start byte
并且np.loadtxt不接受不同的编码

然后,我尝试了以下方法:

arr = np.fromiter(codecs.open(path_in +files[0], encoding='iso-8859-1'), np.float)
但这与标题不同:

ValueError: could not convert string to float: 'Listing of FFT PSF Data\r\n'
最后,我在这里发现了一些类似的问题:,但是:

s = codecs.open(path_in + files[0], encoding='iso-8859-1').read()
im = np.loadtxt(s)

获取“IOPub数据速率已超出”错误消息,即使我的速率大幅提升。

解决方案是将
loadtxt
与Numpy 1.14一起使用,Numpy 1.14具有
编码
参数


然而,当时要升级到Numpy 1.14,我必须切换到anaconda-64。

在Numpy 1.14中,
loadtxt
函数有一个
编码
参数。也许您可以升级您的SciPy软件包?由于某些原因,我无法更新Numpy 1.13.3以上版本(在MacOSX上使用conda/anaconda)切换到conda/anaconda 64,然后可以更新到Numpy 1.14并使用
loadtxt
编码
参数!非常感谢@lenzGood听到它起作用。既然你的问题已经获得了一些选票,也许有一个答案是值得的。你为什么不回答你自己的问题,描述一下你是如何让它工作的?它可能对未来的读者有价值。