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)
当我运行它时,它显示我的所有变量都没有定义。如何将内容设置为变量,然后我可以绘制图。
答案 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.number
和values.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]。