2024-10-06 06:47:28 发布
网友
我有一个csv文件,其中包含:
0812,EP2463,R,FEIGE 0812,EP2466,R,FEIGE 0816,EP2462,R,FEIGE 0816,EP2460,R,FEIGE
我需要把它转换成一个二维的字符串数组。当我尝试的时候
我得到一个一维阵列
有更好的方法吗?在
您可以使用pandas,它有更多的内置功能:
pandas
import numpy as np from io import StringIO mystr = StringIO("""0812,EP2463,R,FEIGE 0812,EP2466,R,FEIGE 0816,EP2462,R,FEIGE 0816,EP2460,R,FEIGE""") # replace mystr with 'data.csv' res = pd.read_csv(mystr, header=None, dtype=object).values.astype(str)
结果:
在一个使用numpy 1.14的PY3(ipython)会话中,以及一个用BOM(在Linux中)编写为UTF8的文件中:
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')])
使用dtype=None,并且忽略BOM,这个数组是1d的结构化(复合)数据类型。也就是说,它推断第一列可以作为整数读取。在
dtype=None
作为字符串加载时,会给出一个二维字符串数据类型(这里是unicode,但可以是bytestring):
以二进制模式读取的同一文件是:
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'
用你的额外的绳子:
你多余的绳子是
In [168]: print('\xef\xbb\xbf') 
您可以使用
pandas
,它有更多的内置功能:结果:
^{pr2}$在一个使用numpy 1.14的PY3(ipython)会话中,以及一个用BOM(在Linux中)编写为UTF8的文件中:
使用
dtype=None
,并且忽略BOM,这个数组是1d的结构化(复合)数据类型。也就是说,它推断第一列可以作为整数读取。在作为字符串加载时,会给出一个二维字符串数据类型(这里是unicode,但可以是bytestring):
^{pr2}$以二进制模式读取的同一文件是:
用你的额外的绳子:
你多余的绳子是
相关问题 更多 >
编程相关推荐