python – CsvReader下一个函数

我得到一个csv文件,但我想跳过第一行数据,然后继续下一步.这是我的代码:

def read_csv(inputfile):
    return list(csv.reader(inputfile)) #<-----

def generate_xml(reader,outfile):
    root = Element('Solution')
    root.set('version','1.0')
    tree = ElementTree(root)        
    head = SubElement(root, 'DrillHoles')
    description = SubElement(head,'description')
    current_group = None
    i = 1
    for row in reader.next(): #<-----
        x1,y1,z1,x2,y2,z2,cost = row
        if current_group is None or i != current_group.text:
            current_group = SubElement(description, 'hole',{'hole_id':"%s"%i})

            collar = SubElement(current_group,'collar')
            toe = SubElement(current_group,'toe')
            cost1 = SubElement(current_group,'cost')
            collar.text = ','.join((x1,y1,z1))
            toe.text = ','.join((x2,y2,z2))
            cost1.text = cost
        i+=1
    head.set('total_holes', '%s'%i)
    indent.indent(root)
    tree.write(outfile)

如您所见,我将csv文件作为列表返回,然后将其传递给generate_xml函数.但是,当我运行完整的程序时,有一个

error: 'list' object has no attribute 'next'
最佳答案
你有一个列表,而不是迭代器.只需将其切片:

for row in reader[1:]:

或者当你还有一个实际的csv.reader()对象时跳过第一行:

def read_csv(inputfile):
    reader = csv.reader(inputfile)
    next(reader)
    return list(reader)

你最好还是返回阅读器对象,而不是将所有行读入内存;除非你绝对需要随机访问行.

您也应该使用next() function,因为它适用于Python 2.6和3,其中迭代器.next()方法已重命名为.__ next __().

否则你永远不会在reader.next()中使用行,因为csv.reader()迭代器上的.next()会返回一行.

转载注明原文:python – CsvReader下一个函数 - 代码日志