2017-01-27 2 views
0

Ich habe verschiedene Beispiele gesucht, aber ich habe Fehler. Ich benutze Python 3.5.2 Ich versuche, yahoo Minute Daten mit Yahoo chartapi - API mit der fließenden URL unten herunterladen.Yahoo API ValueError: Konnte Zeichenfolge nicht in Gleitkomma konvertieren:

Ich erhalte

Valueerror: konnte nicht Zeichenfolge konvertieren zu schweben:

def read_data(passing_for_url,fp): 
    all_features = [] 
    timestamp_list =[] 
    close_list = [] 
    high_list = [] 
    low_list = [] 
    open_price_list =[] 
    volume_list = [] 
    count=0 
    if passing_for_url==1: 

    datasetname= (urlopen('http://chartapi.finance.yahoo.com/instrument/1.0/GOOG/chartdata;type=quote;range=1d/csv').read().decode('utf-8')).split('\n') 
    else: 
     datasetname = fp 
    for line in datasetname: 
     l=line.split(',') 
     #print (l) 
     if(passing_for_url==1): 
      if count > 16: 
      fp.write(line) 
      else: 
      count+=1 
      continue 
    x = list(l[len(l)-1]) 
    x = x[0:len(x)-1] 
    x = ''.join(x) 
    l[len(l)-1]=x 
    print (l) 
    all_features.append(l) 
    timestamp, close, high, low, open_price , volume = l 
    timestamp_list.append(int(timestamp)) 
    close_list.append(float(close)) 
    high_list.append(float(high)) 
    low_list.append(float(low)) 
    open_price_list.append(float(open_price)) 
    volume_list.append(float(volume)) # <== Getting error here 
return timestamp_list, close_list, high_list, low_list, open_price_list, volume_list 

Unten ist die Antwort Probe aus der URL

uri:/instrument/1.0/GOOG/chartdata;type=quote;range=1d/csv 
ticker:goog 
Company-Name:Alphabet Inc. 
Exchange-Name:NMS 
unit:MIN 
timezone:EST 
currency:USD 
gmtoffset:-18000 
previous_close:835.6700 
Timestamp:1485441000,1485464400 
labels:1485442800,1485446400,1485450000,1485453600,1485457200,1485460800,1485464400 
values:Timestamp,close,high,low,open,volume 
close:827.1602,833.9300 
high:827.4200,834.6201 
low:827.0100,833.9300 
open:827.3400,833.9300 
volume:0,99800 
1485441610,833.9300,833.9300,833.9300,833.9300,99800 <== Need to start here 
1485442196,831.0830,831.0830,831.0830,831.0830,47700 
1485442503,832.3000,832.3000,832.3000,832.3000,60800 
1485442811,832.2100,832.2100,832.2100,832.2100,33000 
1485443111,831.4300,831.4300,831.4300,831.4300,41900 
1485443408,831.0120,831.0120,831.0120,831.0120,34600 
1485443712,831.8400,831.8400,831.8400,831.8400,39600 
1485443997,832.3400,832.3400,832.3400,832.3400,38400 
1485444312,831.7600,831.7600,831.7600,831.7600,36000 
1485444579,831.0001,831.4000,831.0000,831.4000,94700 

ich nur müssen Daten aus der haben timestamp, close, high, low, open_price, volume und darunter, die ersten 17 Zeilen sind weggelassen.

Aber ich bin immer einen Fehler mit Python 3.5.2

ValueError: could not convert string to float: 


Traceback (most recent call last): 
File "google.py", line 207, in <module> 
timestamp_list, close_list, high_list, low_list, open_price_list, volume_list = read_data(choice, fp1) 
File "google.py", line 49, in read_data 
volume_list.append(float(volume)) 
ValueError: could not convert string to float: 
+0

[Maßgebliche] (http://stackoverflow.com/questions/8420143/valueerror -could-not-convert-String-zu-Float-ID # 8420179) – Himal

Antwort

1

Dieses Stück versteht nicht, was es für, aber es löscht das letzte Zeichen des Volumens Spalte:

x = list(l[len(l)-1]) 
x = x[0:len(x)-1] 
x = ''.join(x) 
l[len(l)-1]=x 

Es ist eine Zeile mit folgendem Inhalt:

1485450601,828.5500,828.5500,828.4400,828.4999,0 

Aber wie ich bereits erwähnt habe, entfernt dies das letzte Zeichen aus der Volume-Spalte; Mit anderen Worten, wandle die '0' in '' um, was beim Konvertieren in float den Fehler erzeugt.

das letzte Ende der Leitung Zusätzlich beseitigt werden müssen, dafür haben wir strip()

komplette Code verwenden:

from urllib.request import urlopen 

def read_data(passing_for_url,fp): 
    all_features = [] 
    timestamp_list =[] 
    close_list = [] 
    high_list = [] 
    low_list = [] 
    open_price_list =[] 
    volume_list = [] 
    count=0 
    if passing_for_url==1: 
     datasetname= (urlopen('http://chartapi.finance.yahoo.com/instrument/1.0/GOOG/chartdata;type=quote;range=1d/csv') 
      .read().decode('utf-8').strip()).split('\n') 
    else: 
     datasetname = fp 
    for line in datasetname: 
     l=line.split(',') 
     #print (l) 
     if(passing_for_url==1): 
      if count > 16: 
       fp.write(line) 
      else: 
       count+=1 
       continue 
     all_features.append(l) 
     timestamp, close, high, low, open_price , volume = l 
     timestamp_list.append(int(timestamp)) 
     close_list.append(float(close)) 
     high_list.append(float(high)) 
     low_list.append(float(low)) 
     open_price_list.append(float(open_price)) 
     volume_list.append(float(volume)) 
    return timestamp_list, close_list, high_list, low_list, open_price_list, volume_list 
+0

fantastisch es funktioniert super. Danke. Wenn ich alle Aktien in der S & P 500-Liste herunterladen oder tun wollte, mache ich eine Schleife für jede von ihnen. um die gleiche Sache zu erreichen, wie würde ich darüber gehen – JourneyMan

+0

Ich verstehe deine Frage nicht, erklären. – eyllanesc

+0

Zur Zeit liest oder lädt der oben stehende Code nur Echtzeitdaten in Echtzeit. Ich habe mich gefragt, wie man alle Minutendaten für Aktien herunterladen kann, die auf der S & P 500-Liste aufgeführt sind (oder nur 100 von ihnen beginnen, normalerweise sind es ungefähr 500 Firmennamen auf der Liste, die S & P 500 ausmachen) – JourneyMan

Verwandte Themen