Python 将带有头的文件和编码问题读取到numpy数组中
我有一个文件(如果您想知道,来自Zemax的PSF)如下所示: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
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听到它起作用。既然你的问题已经获得了一些选票,也许有一个答案是值得的。你为什么不回答你自己的问题,描述一下你是如何让它工作的?它可能对未来的读者有价值。