python2.7定义txt文件的内容

时间:2014-03-18 10:26:37

标签: python python-2.7 numpy undefined

2330,0.5,13:30:08,121.5,106.5,114.5,115,113.5,114.5,37464,4243,114,1977,113.5,3710,113,5019,112.5,2943,112,1966,114.5,2305,115,4517,115.5,2459,116,2376,116.5,2186,0,1,24,1000,25928305829,name,22,33,44

这是文本文件的内容。 我在fileLine中设置了文件名。 它是一行,用逗号分隔。

number,rangep,timep,maxp,minp,openp,highp,lowp,closep,volume,curvolume,openprice,
openbvolume,bp1,bv1,bp2,bv2,bp3,bv3,bp4,bv4,bp5,bv5,sp1,sv1,sp2,sv2,sp3,sv3,sp4,sv4
sp5,sv5,un1,un2,un3,un4,un5,namep,un6,un7,un8 = np.loadtxt(fileLine,delimiter=',',umpack=True)

当我运行它时,它显示我的所有变量都没有定义。如何将内容设置为变量,然后我可以绘制图。

3 个答案:

答案 0 :(得分:1)

如果没有明确告诉Python您正在执行此操作,则无法将分配目标拆分为多行。您可以使用括号:

(number,rangep,timep,maxp,minp,openp,highp,lowp,closep,volume,curvolume,openprice,
 openbvolume,bp1,bv1,bp2,bv2,bp3,bv3,bp4,bv4,bp5,bv5,sp1,sv1,sp2,sv2,sp3,sv3,sp4,
 sv4,sp5,sv5,un1,un2,un3,un4,un5,namep,un6,un7,un8) = np.loadtxt(fileLine, delimiter=',')

但是,我不会尝试从一行分配这么多变量,而是相当笨拙且难以理解。

需要在这里使用unpack=True,你只需加载一行,而你不需要在这里将多行转换成列。实际上,在这里使用numpy.loadtext()可能会有点过分,因为您将生成的array()对象再次打包成单独的值。

根据您的数据行,numpy.txt错误的工具;它希望所有值都是相同的类型(默认为float),并且您的数据行包含类型的 mix

你应该在这里完全避免numpy.loadtext();你可以使用:

with open(fileLine) as f:
    row = f.readline().split(',')

并使用row[0]等进行索引

在这种情况下,您可以使用collections.namedtuple() factory为这样的行生成一个元组,允许您按名称仍然处理单个值,同时避免这样的怪物分配行:

from collections import namedtuple

Values = namedtuple('Values',
    'number,rangep,timep,maxp,minp,openp,highp,lowp,closep,volume,curvolume,'
    'openprice,openbvolume,bp1,bv1,bp2,bv2,bp3,bv3,bp4,bv4,bp5,bv5,sp1,sv1,sp2,sv2,sp3,'
    'sv3,sp4,sv4,sp5,sv5,un1,un2,un3,un4,un5,namep,un6,un7,un8')

with open(fileLine) as f:
    values = Values(*f.readline().split(','))

现在,您可以将这些内容称为values.numbervalues.curvolume等。

您必须手动转换任何值。

答案 1 :(得分:1)

由于它是一个简单的文件,您可以使用DictReader模块中的csv来获得更易于管理的数据结构:

import csv

fields = ['number','rangep','timep','maxp','minp','openp','highp','lowp','closep','volume','curvolume','openprice','openbvolume','bp1','bv1','bp2','bv2','bp3','bv3','bp4','bv4','bp5','bv5','sp1','sv1','sp2','sv2','sp3','sv3','sp4','sv4','sp5','sv5','un1','un2','un3','un4','un5','namep','un6','un7','un8']

with open('somefile.txt') as f:
   reader = csv.DictReader(f, fieldnames=fields)
   rows = list(reader)

for row in rows:
    print(row['number']) # and so on

答案 2 :(得分:0)

f = open(filename, 'r')
line = f.readline()
alist = line.split(',')
f.close()

然后你就可以处理alist中的数据了。例如:number as alist [0]。