我得到一个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)
Run Code Online (Sandbox Code Playgroud)
如您所见,我将csv文件作为列表返回,然后将其传递给generate_xml函数.但是,当我运行完整的程序时,有一个
error: 'list' object has no attribute 'next'
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 24
你有一个列表,而不是迭代器.只需将其切片:
for row in reader[1:]:
Run Code Online (Sandbox Code Playgroud)
或者当你还有一个实际的csv.reader()对象时跳过第一行:
def read_csv(inputfile):
reader = csv.reader(inputfile)
next(reader)
return list(reader)
Run Code Online (Sandbox Code Playgroud)
你最好不要返回reader对象而不是将所有行读入内存; 除非你绝对需要随机访问行.
您也应该使用该next()函数,因为它适用于Python 2.6+和3,其中迭代器.next()方法已重命名为.__next__().
否则你永远不会使用for row in reader.next(),因为.next()在csv.reader()迭代器返回一个排.
对于python 2.x,代码是:
data = []
with open('xxx.csv') as f:
r = csv.reader(f)
name = r.next()[1] # assume the first 2 rows are name and unit
unit = r.next()
for row in r:
data.append(row)
Run Code Online (Sandbox Code Playgroud)
对于python 3.x,请使用next(r)而不是r.next()
| 归档时间: |
|
| 查看次数: |
23419 次 |
| 最近记录: |