Python2.7 定义txt文件的内容

2024-09-27 00:21:43 发布

您现在位置:Python中文网/ 问答频道 /正文

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)

当我运行这个程序时,它显示我的所有变量都没有定义。如何将内容设置为变量,然后才能绘制绘图。你知道吗


Tags: namenumber内容文件名逗号文本文件filelineminp
3条回答

由于它是一个简单的文件,因此可以使用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
f = open(filename, 'r')
line = f.readline()
alist = line.split(',')
f.close()

然后你就可以处理列表中的数据了。例如:数字为[0]。你知道吗

如果不明确地告诉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),并且您的数据行包含类型的混合。你知道吗

在这里,您应该避免使用numpy.loadtext();您可以使用:

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

并用row[0]等索引

在本例中,您可以使用^{} 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,等等

不过,您必须手动转换任何值。你知道吗

相关问题 更多 >

    热门问题