Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用第一行作为变量_Python_Variables_Header_Row - Fatal编程技术网

在python中使用第一行作为变量

在python中使用第一行作为变量,python,variables,header,row,Python,Variables,Header,Row,我想更改这段代码,使其更加动态和具体。我想使用每列中的第一行信息作为替换“numAtts”的标题。这样,第一行也不会包含在@data下面的数据中 这是我的密码: # -*- coding: UTF-8 -*- import logging from optparse import OptionParser import sys def main(): LEVELS = {'debug': logging.DEBUG, 'info': logging.INF

我想更改这段代码,使其更加动态和具体。我想使用每列中的第一行信息作为替换“numAtts”的标题。这样,第一行也不会包含在@data下面的数据中

这是我的密码:

# -*- coding: UTF-8 -*-

import logging
from optparse import OptionParser
import sys

def main():
    LEVELS = {'debug': logging.DEBUG,
              'info': logging.INFO,
              'warning': logging.WARNING,
              'error': logging.ERROR,
              'critical': logging.CRITICAL}

    usage = "usage: arff automate [options]\n ."
    parser = OptionParser(usage=usage, version="%prog 1.0")

    #Defining options   
    parser.add_option("-l", "--log", dest="level_name", default="info", help="choose the logging level: debug, info, warning, error, critical")    

    #Parsing arguments
    (options, args) = parser.parse_args()

    #Mandatory arguments    
    if len(args) != 1:
        parser.error("incorrect number of arguments")

    inputPath = args[0]


    # Start program ------------------

    with open(inputPath, "r") as f:
        strip = str.strip
        split = str.split
        data = [split(strip (line)) for line in f]

###############################################################
## modify here##

    numAtts = len(data[0])
    logging.info(" Number of attributes : "+str(numAtts) )

    print "@RELATION relationData"
    print ""

    for e in range(numAtts):
        print "@ATTRIBUTE att{0} NUMERIC".format(e)

###############################################################

    classSet = set()
    for e in data:
        classSet.add(e[-1])

    print "@ATTRIBUTE class {%s}" % (",".join(classSet))
    print ""

    print "@DATA"

    for item in data:
        print ",".join(item[0:])


if __name__ == "__main__":
    main()
输入文件如下(制表符分隔):

输出文件(实际)如下所示:

@RELATION relationData

@ATTRIBUTE att0 NUMERIC
@ATTRIBUTE att1 NUMERIC
@ATTRIBUTE att2 NUMERIC
@ATTRIBUTE att3 NUMERIC
@ATTRIBUTE att4 NUMERIC
@ATTRIBUTE att5 NUMERIC
@ATTRIBUTE att6 NUMERIC
@ATTRIBUTE class {EXAMPLEB,STRING,EXPAMPLEC,EXAMPLEA}

@DATA
F1,F2,F3,F4,F5,{0,1},STRING
7209,3004,15302,5203,2,1,EXAMPLEA
6417,3984,16445,5546,15,1,EXAMPLEB
8822,3973,23712,7517,18,0,EXPAMPLEC
所需的输出文件如下所示:

@RELATION relationData
@attribute 'att[F1]' numeric
@attribute 'att[F2]' numeric
@attribute 'att[F3]' numeric
@attribute 'att[F4]' numeric
@attribute 'att[F5]' numeric
@attribute 'att[F6]' {0,1}
@attribute 'class' STRING

@data
7209,3004,15302,5203,2,1,EXAMPLEA
6417,3984,16445,5546,15,1,EXAMPLEB
8822,3973,23712,7517,18,1,EXPAMPLEC
因此,正如您所看到的,我的代码就快到了,但我无法/不确定如何将第一行标记为用于标题的变量,并开始使用第2行处理数据

因此,我的问题是:如何格式化输出以使用第一行作为标题?
有人有什么见解吗?谢谢

您可以利用python中的
open
返回生成器这一事实
f.readline()
获取文件中的下一行。它还会导致生成器移到下一行,因此在列表理解中,它将跳过您已使用
f.readline()
阅读的那一行。(请参阅此处的文档:)


您可以利用python中的
open
返回生成器这一事实
f.readline()
获取文件中的下一行。它还会导致生成器移到下一行,因此在列表理解中,它将跳过您已使用
f.readline()
阅读的那一行。(请参阅此处的文档:)


您可以利用python中的
open
返回生成器这一事实
f.readline()
获取文件中的下一行。它还会导致生成器移到下一行,因此在列表理解中,它将跳过您已使用
f.readline()
阅读的那一行。(请参阅此处的文档:)


您可以利用python中的
open
返回生成器这一事实
f.readline()
获取文件中的下一行。它还会导致生成器移到下一行,因此在列表理解中,它将跳过您已使用
f.readline()
阅读的那一行。(请参阅此处的文档:)


您没有准确地将所需标题格式化为输出。这里

for e in range(numAtts):
        print "@ATTRIBUTE att{0} NUMERIC".format(e)
您只是将
e
的值格式化为输出。您需要在此处访问
数据[0]

for e in range(numAtts):
        print "@ATTRIBUTE att'[{0}]'' NUMERIC".format(dataa[0][e] )
对于以后的使用部分,您可以利用
range/xrange
跳过
0th
索引

for e in range(1, numAtts):
    print ",".join(data[e][0:])
另外,我建议不需要将
str
方法存储在变量中,您可以使用方法链接来获得所需的值。 与此相反:

data = [split(strip (line)) for line in f]
使用以下命令:

data = [line.strip().split() for line in f]
***********编辑以包含此选项***********

next
还允许跳过第一行,从数据段开始,因此从第二行开始

next(iter(data))
for item in data[1:]:
    print ",".join(item[0:])

您没有准确地将所需标题格式化为输出。这里

for e in range(numAtts):
        print "@ATTRIBUTE att{0} NUMERIC".format(e)
您只是将
e
的值格式化为输出。您需要在此处访问
数据[0]

for e in range(numAtts):
        print "@ATTRIBUTE att'[{0}]'' NUMERIC".format(dataa[0][e] )
对于以后的使用部分,您可以利用
range/xrange
跳过
0th
索引

for e in range(1, numAtts):
    print ",".join(data[e][0:])
另外,我建议不需要将
str
方法存储在变量中,您可以使用方法链接来获得所需的值。 与此相反:

data = [split(strip (line)) for line in f]
使用以下命令:

data = [line.strip().split() for line in f]
***********编辑以包含此选项***********

next
还允许跳过第一行,从数据段开始,因此从第二行开始

next(iter(data))
for item in data[1:]:
    print ",".join(item[0:])

您没有准确地将所需标题格式化为输出。这里

for e in range(numAtts):
        print "@ATTRIBUTE att{0} NUMERIC".format(e)
您只是将
e
的值格式化为输出。您需要在此处访问
数据[0]

for e in range(numAtts):
        print "@ATTRIBUTE att'[{0}]'' NUMERIC".format(dataa[0][e] )
对于以后的使用部分,您可以利用
range/xrange
跳过
0th
索引

for e in range(1, numAtts):
    print ",".join(data[e][0:])
另外,我建议不需要将
str
方法存储在变量中,您可以使用方法链接来获得所需的值。 与此相反:

data = [split(strip (line)) for line in f]
使用以下命令:

data = [line.strip().split() for line in f]
***********编辑以包含此选项***********

next
还允许跳过第一行,从数据段开始,因此从第二行开始

next(iter(data))
for item in data[1:]:
    print ",".join(item[0:])

您没有准确地将所需标题格式化为输出。这里

for e in range(numAtts):
        print "@ATTRIBUTE att{0} NUMERIC".format(e)
您只是将
e
的值格式化为输出。您需要在此处访问
数据[0]

for e in range(numAtts):
        print "@ATTRIBUTE att'[{0}]'' NUMERIC".format(dataa[0][e] )
对于以后的使用部分,您可以利用
range/xrange
跳过
0th
索引

for e in range(1, numAtts):
    print ",".join(data[e][0:])
另外,我建议不需要将
str
方法存储在变量中,您可以使用方法链接来获得所需的值。 与此相反:

data = [split(strip (line)) for line in f]
使用以下命令:

data = [line.strip().split() for line in f]
***********编辑以包含此选项***********

next
还允许跳过第一行,从数据段开始,因此从第二行开始

next(iter(data))
for item in data[1:]:
    print ",".join(item[0:])

我接受你的回答,因为第一部分做得很好。但是,对于第二部分,更好的选择是使用
next
,以便在
data
部分中不包含列标题。我在你的答案中加入了这个选项作为编辑。我接受你的答案,因为第一部分做得很好。但是,对于第二部分,更好的选择是使用
next
,以便在
data
部分中不包含列标题。我在你的答案中加入了这个选项作为编辑。我接受你的答案,因为第一部分做得很好。但是,对于第二部分,更好的选择是使用
next
,以便在
data
部分中不包含列标题。我在你的答案中加入了这个选项作为编辑。我接受你的答案,因为第一部分做得很好。但是,对于第二部分,更好的选择是使用
next
,以便在
data
部分中不包含列标题。我在你的答案中加入了这个选项作为编辑。