2017-01-30 7 views
0

Nach dem Ausführen folgenden Code zu verdoppeln, können Sie die Liste fünf Indizes in 'index'Einzel Quote String konvertieren Quote String

import tkinter as tk 
OPTIONS = [ "^AEX","^AXJO","^BFX","^BSESN","^MERV","^DJR","^PUT","^OMXC20","^DJA","^DJI","^DJICA","^DJT","^DJU","^DWCF"] 
root = tk.Tk() 
tk.Label(root, text='OptionMenus', bg='#aaa').pack(fill='x') 
index = [] 
def on_button(): 
    index.clear() 
    for i,var in enumerate(o_vars): 
     index.append('{}'.format(var.get())) 
     index.__str__() 
     print('Selected Index {}: {}'.format(i+1, var.get())) 
    print() 
o_vars = [] 
for i in range(5): 
    var = tk.StringVar(value='- select -') 
    o_vars.append(var) 
    o = tk.OptionMenu(root, var, *OPTIONS) 
    o.pack() 
b = tk.Button(root, text='OK', command=on_button) 
b.pack(fill='x') 
root.mainloop() 

Basierend auf Ihrer Auswahl bekommen es wie folgt aussieht: Jetzt

index 

Out: ['^BSESN', '^DJI', '^HSI', '^JKII', '^KS11'] 

Ich muss diese Zeichenfolge in einen anderen Code der Zeile am Ende des folgenden Codes eingeben, suchen Sie nach dem Teil Index [0], Index [1] ... Index [4]

Dies ist nicht passiert. Meine Vermutung ist, dass es wegen des erforderlichen doppelten Zitats sein muss. Irgendeine Idee, wie man es erreicht. Versucht Replace und alle.

import pandas as pd 
import urllib 
import datetime 
import requests 
import pylab 
x =[] 
yql_bs_query = [] 
yql_bs_url = [] 
data=[] 
quote_new =[] 
baseurl = "https://query.yahooapis.com/v1/public/yql?" 
from datetime import date 
import numpy as np 
start_date = date(2007, 1, 1) 
end_date = datetime.date.today() 
delta = datetime.timedelta(np.timedelta64(end_date - start_date,'D').astype(int) /20) 
while start_date <= end_date: 
    x.append(start_date.strftime("%Y-%m-%d")) 
    start_date += delta 
for i in range(0,20): 
    x[i] = str.format((pd.to_datetime(x[i]) + datetime.timedelta(days=1)).strftime("'%Y-%m-%d'")) 
    yql_bs_query.append(('select * from yahoo.finance.historicaldata where symbol in (index[0],index[1],index[2],index[3],index[4]) and startDate = ' +x[i]+' and endDate = ' +pd.to_datetime(x[i+1]).strftime("'%Y-%m-%d'")))` 
+2

Seine unklar zu vermeiden, was das genaue Problem, das Sie haben, aber ich denke, es ist ziemlich sicher zu sagen, dass die Zitate für die Zeichenfolge ist nicht das Problem Hier. – Sayse

+0

'wählen * aus yahoo.finance.historicaldata wo Symbol in (Index [0], Index [1], Index [2], Index [3], Index [4]) und startDate =' + x [i] + ' und endDate = '+ pd.to_datetime (x [i + 1]). strftime ("'% Y-% m-% d '")))' also erwarte ich, dass index [0] durch seine ersetzt werden sollte Inhalt in der obigen Zeile. Sie haben recht, da ich mir nicht sicher bin, was auch falsch ist und warum 'Index' -Listenwerte nicht in der oberen Zeile erscheinen. – Bhushan

Antwort

0
'select * from yahoo.finance.historicaldata where symbol in (index[0],index[1],index[2],index[3],index[4]) and startDate = ' 

Hat nicht wirklich jede der Indexwerte ersetzen, da sie diese als Literalzeichenfolgen nur behandelt, sondern man auf sie eine Schnur Formatierung mindestens anwenden müssen.

'select * from yahoo.finance.historicaldata where symbol in ({}, {}, {}, {}, {}) and startDate = '.format(index[0],index[1],index[2],index[3],index[4]) 

Das sollte Sie zumindest näher an die richtige SQL-Zeichenfolge bringen.

Obwohl, sollten Sie sicherstellen, parameterized queries verwenden bobby tables

+1

Danke Sayse! yql_bs_query.append (('(wählen Sie * aus yahoo.finance.historicdata wo Symbol in ("{}", "{}", "{}", "{}", "{}")' format (str (index [0]), index [1], index [2], index [3], index [4]) + 'und startDate =' + x [i] + 'und endDate =' + pd.to_datetime (x [i + 1]). strftime ("% Y-% m-% d '"))) – Bhushan