2013-07-07 11 views
5

Bir csv dosyası verilmiş ancak ilk veri satırını atlamak ve bir sonraki sayfaya geçmek istiyorum. Gördüğünüz gibi, ben o zaman ben generate_xml fonksiyonu aktaracağız liste olarak csv dosyası iadeCsvReader Sonraki işlev

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) 

: İşte benim kodudur. i tam programı çalıştırdığınızda Ancak bir liste değil, bir yineleyici sahip bir

error: 'list' object has no attribute 'next' 

cevap

20

yoktur.

for row in reader[1:]: 

ya da hala gerçek bir csv.reader() nesne varken o ilk satırı atlamak: Sadece yerine bunu dilim

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

Sen reader nesne dönen yerine belleğe tüm satırları okurken daha iyi olurdu Orada; Satırlara kesinlikle rastgele erişmedığınız sürece. o yineleyici .next() yöntem .__next__() yeniden adlandırıldı 3, Python için çalışır 2.6+ gibi

Ayrıca gerçekten yerine next() function kullanmalıdır.

Bir csv.reader() yineleyici üzerinde .next()bir satır döndürür, çünkü aksi asla kullanım for row in reader.next() ediyorum.

piton 2.x için
5

, kod şudur:

piton 3.x için
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) 

yerine r.next()

arasında next(r) kullanmak