2014-09-13 16 views
-3

Je veux faire un CSV avec les valeurs fermées des stocks, en les téléchargeant à partir de Yahoo Finance en utilisant python 2.7 sur Windows. Le fichier est appelé "Prix historiques". J'ai les tickers dans une liste et je veux savoir si je peux faire un fichier csv avec les valeurs fermées dans une rangée. Par exemple:Faire/télécharger un fichier csv avec python

AAPL,109,87,110.06, 
GOOG,2123.546,213,56, 

(et ainsi de suite)

Jusqu'à présent, mon script est la suivante:

import urllib2 
import csv 

nasdaqlisted = urllib2.urlopen("ftp://ftp.nasdaqtrader.com/SymbolDirectory/nasdaqlisted.txt") 
raw = nasdaqlisted.read().split("\r\n") 
del raw[0] 
del raw[-1] 

tickerslist = [] 
for l in raw: 
    linea = l.split("|") 
    tickerslist.append(linea[0]) 
del tickerslist[-1] 

def closed(tickerslist): 
    url = urllib2.urlopen("http://real-chart.finance.yahoo.com/table.csv?s=" +tickerslist+ "&d=8&e=13&f=2014&g=d&a=11&b=12&c=1980&ignore=.csv") 
    raw = url.read().split("\r\n") 
    del raw[0] 
    del raw[-1] 

closed_us = open("closed-us.csv","w") 

for i in tickerslist: 
    cierres.write(closed(i)) 
closed_us.close() 

Merci beaucoup!

P.D .: J'ai trouvé une cette question. Il peut vous aider Download a .csv file with Python mais je ne fonctionne pas en disant que c'est parce que "demande" ne peut être importé (je suppose que j'utilise python 2.7 au lieu de 3.3)

+0

Il s'agit du 'depuis urllib2 import urlopen'; sinon, le code du message que vous avez trouvé fonctionne exactement de la même manière. –

Répondre

0

Tout ce que vous avez l'air bien. Pour un fichier CSV, en général, il suffit simplement d'écrire des fichiers texte normaux et de mettre des virgules là où c'est nécessaire - pas besoin de fansy. Dans votre exemple:

def closed(tickerslist): 
    returnLine = tickerslist 
    url = urllib2.urlopen("http://real-chart.finance.yahoo.com/table.csv?s=" +tickerslist+ "&d=8&e=13&f=2014&g=d&a=11&b=12&c=1980&ignore=.csv") 
    raw = url.read().split("\r\n")[1:-1] 
    # if you wanted to grab the last number on each line... 
    for line in raw: 
     returnLine += ','+line[line.rfind(',')+1:]) 
    return returnLine+'\n' 

Si vous êtes intéressé que dans une petite partie d'un fichier, la méthode « lire » a un paramètre optionnel pour les octets à lire. Vous n'avez donc pas besoin de télécharger tout le fichier pour trouver quelque chose au début. Ce paramètre est également utile si vous souhaitez télécharger un fichier plus volumineux dans un fil séparé et mettre à jour le fil principal (généralement un gui) sur la progression.

Espérons que cela aide.

Questions connexes