来自np.loadtxt Python的分隔符错误

时间:2014-09-13 22:37:55

标签: python numpy

我试图在列表中加总一些值,所以我加载了包含值的.dat文件,但是Python生成数据总和的唯一方法是将它与',& #39 ;.现在,这就是我得到的。

    altura = np.loadtxt("bio.dat",delimiter=',',usecols=(5,),dtype='float')
  File "/usr/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 846, in loadtxt
    vals = [vals[i] for i in usecols]
IndexError: list index out of range

这是我的代码

import numpy as np

altura = np.loadtxt("bio.dat",delimiter=',',usecols=(5,),dtype='str')
print altura

这是文件' bio.dat'

1 Katherine Oquendo M 18    1.50    50  
2 Pablo Restrepo    H 20    1.83    79  
3 Ana Agudelo   M 18    1.58    45  
4 Kevin Vargas  H 20    1.74    80  
5 Pablo madrid  H 20    1.70    55  

我打算做的是

x=sum(altura)

我应该如何处理'分开'?

3 个答案:

答案 0 :(得分:1)

在我的情况下,某些行包含@media screen and (max-width:your-value-here){ img{display:none} } 字符 然后numpy将忽略该行的所有休止符,因为这意味着“评论”。
因此请使用#参数再次尝试

comments

我建议您不要使用altura = np.loadtxt("bio.dat",delimiter=',',usecols=(5,),dtype=‘str’,comments=‘') 。因为如果你必须处理一个大的(> 1M行)文件,它会非常慢。

答案 1 :(得分:0)

该文件不需要以逗号分隔。这是我的示例运行,使用StringIO来模拟文件。我假设您想要总结看起来一个人身高的数字(以米为单位)。

In [17]: from StringIO import StringIO
In [18]: s="""\
1 Katherine Oquendo M 18    1.50    50  
2 Pablo Restrepo    H 20    1.83    79  
3 Ana Agudelo   M 18    1.58    45  
4 Kevin Vargas  H 20    1.74    80  
5 Pablo madrid  H 20    1.70    55  
"""
In [19]: S=StringIO(s)
In [20]: data=np.loadtxt(S,dtype=float,usecols=(5,))
In [21]: data
Out[21]: array([ 1.5 ,  1.83,  1.58,  1.74,  1.7 ])
In [22]: np.sum(data)
Out[22]: 8.3499999999999996

as script(包含.txt文件中的数据)

import numpy as np
fname = 'stack25828405.txt'
data=np.loadtxt(fname,dtype=float,usecols=(5,))
print data
print np.sum(data)

2119:~/mypy$ python2.7 stack25828405.py
[ 1.5   1.83  1.58  1.74  1.7 ]
8.35

答案 2 :(得分:0)

或者,您可以先将制表符分隔文件转换为csv。

csv支持制表符分隔文件。提供delimiter argument to reader

import csv

txt_file = r"mytxt.txt"
csv_file = r"mycsv.csv"

# use 'with' if the program isn't going to immediately terminate
# so you don't leave files open
# the 'b' is necessary on Windows
# it prevents \x1a, Ctrl-z, from ending the stream prematurely
# and also stops Python converting to / from different line terminators
# On other platforms, it has no effect
in_txt = csv.reader(open(txt_file, "rb"), delimiter = '\t')
out_csv = csv.writer(open(csv_file, 'wb'))

out_csv.writerows(in_txt)

这个答案不是我的工作;这是在https://stackoverflow.com/a/10220428/3767980找到的agf的工作。