2017-01-28 6 views
2

Das folgende ist ein in sich geschlossenes Beispiel. Ändern Sie den "folder_name", um ihn auszuführen. Diese Antworten:Objekt vom Typ '_csv.reader' hat keine len(), csv-Daten nicht erkannt

reader type = _csv.reader 
list(reader) = [] 
_csv.reader' has no len() 

ich viele Dinge ausprobiert, aber immer noch nicht auf die Daten zugreifen, obwohl es in der Datei ist. Jede Hilfe ist sehr willkommen. Bern

################ INPUTS ################ 
folder_name = '/Users/Shared/TS1/Historiques Dividendes/' 
path_to_inter_file = folder_name + 'interm.csv' 

################ End INPUTS ################ 
################ MAIN ################ 
## --- Creates "inter" file after removing previous one if existed 
if os.access(path_to_inter_file, os.W_OK) == True: 
    os.remove(path_to_inter_file) 
if os.access(path_to_inter_file, os.W_OK) == False: 
    finter = open(path_to_inter_file,'w') 

## --- Gets data from an URL 
URL = "<http://chart.finance.yahoo.com/table.csv?s=XLB&a=0&b=24&c=1980&d=0&e=24&f=2040&g=v&ignore=.csv'>" 
data = requests.get(URL) 

## --- Loads data into "inter" file 
finter.write(data.text) 
finter.close 

## --- Reopens "inter" file to read data 
finter = open(path_to_inter_file,'r') 
mreader = csv.reader(finter,delimiter=',') 
print type(mreader) 
list(mreader) 
print list(mreader) 
len(mreader) 

## --- Closes "inter" file and removes it 
finter.close() 
os.remove(path_to_inter_file) 

################ End MAIN ################ 
+0

'finter.close' =>' finter.close() ' –

Antwort

2

mreader ist ein Iterator. Es hat keine Len.

Aber Sie verbrauchen es die Linie, bevor auf eine Liste, so dass Sie konnte einfach tun:

mreader = list(mreader) 

zu convert der Iterator in eine aktuelle Liste der Zeilen, die nun eine len

hat

Beiseite: finter.close tut nichts. Verwenden Sie finter.close() oder einen with Kontextblock, um das automatisch zu behandeln.

+0

Vielen Dank. Es klappt. Ich verstehe, was du mit "konsumieren" meinst. Mit freundlichen Grüßen, Bern – Studix

Verwandte Themen