<p>在一个使用numpy 1.14的PY3(ipython)会话中,以及一个用BOM(在Linux中)编写为UTF8的文件中:</p>
<pre><code>In [166]: np.genfromtxt('stack49969840.txt', delimiter=',', dtype=None,encoding='utf8')
Out[166]:
array([['\ufeff0812', 'EP2463', 'R', 'FEIGE'],
['0812', 'EP2466', 'R', 'FEIGE'],
['0816', 'EP2462', 'R', 'FEIGE'],
['0816', 'EP2460', 'R', 'FEIGE']], dtype='<U6')
In [167]: np.genfromtxt('stack49969840.txt', delimiter=',', dtype=None,encoding='utf-8-sig')
Out[167]:
array([(812, 'EP2463', 'R', 'FEIGE'), (812, 'EP2466', 'R', 'FEIGE'),
(816, 'EP2462', 'R', 'FEIGE'), (816, 'EP2460', 'R', 'FEIGE')],
dtype=[('f0', '<i8'), ('f1', '<U6'), ('f2', '<U1'), ('f3', '<U5')])
</code></pre>
<p>使用<code>dtype=None</code>,并且忽略BOM,这个数组是1d的结构化(复合)数据类型。也就是说,它推断第一列可以作为整数读取。在</p>
<p>作为字符串加载时,会给出一个二维字符串数据类型(这里是unicode,但可以是bytestring):</p>
^{pr2}$
<p>以二进制模式读取的同一文件是:</p>
<pre><code>In [8]: open('stack49969840.txt',mode='rb').read()
Out[8]: b'\xef\xbb\xbf0812,EP2463,R,FEIGE\n0812,EP2466,R,FEIGE\n0816,EP2462,R,FEIGE\n0816,EP2460,R,FEIGE\n'
</code></pre>
<p>用你的额外的绳子:</p>
<p>你多余的绳子是</p>
<pre><code>In [168]: print('\xef\xbb\xbf')

</code></pre>