我有以下字符串的浮点数:
0.621464022829E+00-.143866495639E-020.266573765475E-02-.582189744480E-07
如您所见,该字符串中的数字之间没有空格。我试图使他们的CSV。因此,我希望它们看起来像:
0.621464022829E+00,-.143866495639E-02,0.266573765475E-02,-.582189744480E-07
有没有办法在python中做到这一点?我尝试使用numpy读取文件,例如:
>>> w=numpy.loadtxt('coord', dtype='float')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 856, in loadtxt
items = [conv(val) for (conv, val) in zip(converters, vals)]
ValueError: invalid literal for float():
0.621464022829E+00-.143866495639E-020.266573765475E-02-.582189744480E-07
但是因为没有空格,所以是不可能的。我也尝试过numpy.fromfile
似乎读取了文件,但它显示了这一点:
>>> w=numpy.fromfile('coord', dtype='float')
>>> w
array([ 3.53728147e-057, 3.03226305e-100, 5.64351177e-038,
3.70004839e-033, 1.24395502e-047, 3.37923148e-057,
2.93531907e-086, 3.69971918e-057, 7.25394458e-043])
如果有人可以阐明这个问题,我将感到非常高兴。
编辑:选定的答案有效,但我想补充一点,@ DSM提出的解决方案也非常好:
np.genfromtxt("file.dat", delimiter=18)
看起来您受固定宽度值的限制,而不是定界的。您必须根据字符宽度将字符串切成薄片。
>>> s = '0.621464022829E+00-.143866495639E-020.266573765475E-02-.582189744480E-07'
>>> [float(s[i:i+18]) for i in range(0, len(s), 18)]
[0.621464022829, -0.00143866495639, 0.00266573765475, -5.8218974448e-08]
要读取csv,您可以执行以下操作
with open('file.csv') as f:
data = [[float(line[i:i+18]) for i in range(0, len(line), 18)] for line in f.readlines()]
然后,您可以把它传递给numpy
,如果你想
w = numpy.array(data)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句