2012-06-22 23 views
11

Ben Python'un yeni başlayanıyım. Şimdi ikinci 'for' döngüsünün neden aşağıdaki betikte çalışmadığını anlamaya çalışıyorum. Yani sadece ilk 'for' döngüsünün sonucunu elde edebildim, ancak ikincisinden hiçbir şey elde edemedim. Aşağıdaki komut dosyasını ve veri csv'yi kopyaladım ve yapıştırdım.Neden csv.Reader için 'for' döngüsünü tekrarlayamıyorum? (Python)

Bana neden bu şekilde gittiğini ve ikinci 'for' döngüsünü nasıl yapacağınızı söylerseniz yardımcı olacaktır.

Benim METNİ:

import csv 

file = "data.csv" 

fh = open(file, 'rb') 
read = csv.DictReader(fh) 

for e in read: 
    print(e['a']) 

for e in read: 
    print(e['b']) 

"data.csv":

a,b,c 
tree,bough,trunk 
animal,leg,trunk 
fish,fin,body 

cevap

26

csv okuyucu dosyanın üzerine Yineleyicinin. Bir kez geçtikten sonra, dosyanın sonuna kadar okuyorsunuz, böylece okunacak başka bir şey yok. Eğer tekrar geçmesi gerekiyorsa, dosyanın başlangıcına talep edebilirsiniz: Tekrar okur böylece

fh.seek(0) 

Bu

başlangıcına dosyayı sıfırlar.

data = list(read) 

O zaman birlikte istediğinizi yapabilirsiniz: dosya çok büyük değildir ve verilerle bazı şeyleri yapmak gerekiyorsa

, ayrıca sadece bir liste halinde her şeyi okuyabiliyordu data.

+0

FileObject (değil csv mi yarattık) aynı şekilde okuyun? – SIslam

+0

@SIslam: Evet, seni doğru anlarsam. Bir dosya üzerinde yineleme yaparsanız, sonuna geldiğinizde tekrarlayıcıyı tükettiniz ve başa dönmedikçe daha fazla okuyamazsınız. – BrenBarn

2

okudum ve çok kolay sonra bir kerede listesi üzerinde döngü dict listesini döndürmek CSV dosyasının yolunu almak doe fonksiyonun küçük bir parça,

def read_csv_data(path): 
    """ 
     Reads CSV from given path and Return list of dict with Mapping 
    """ 
    data = csv.reader(open(path)) 
    # Read the column names from the first line of the file 
    fields = data.next() 
    data_lines = [] 
    for row in data: 
     items = dict(zip(fields, row)) 
     data_lines.append(items) 
    return data_lines 

Selamlar

İlgili konular