Python 用于Jupyter笔记本中的循环和字符串格式化

Python 用于Jupyter笔记本中的循环和字符串格式化,python,pandas,for-loop,string-formatting,Python,Pandas,For Loop,String Formatting,我定义了以下元组: stocks = ('san', 'bbva', 'ele') 我使用for循环为每个股票运行查询: for i in stocks: queryTp = """SELECT date,close FROM %s _prices WHERE date >= '%s' """ % (i, datetime(2000,1,3)) 问题是,当我在终端上运行时,查询被完美地存储在query

我定义了以下元组:

stocks = ('san', 'bbva', 'ele')
我使用for循环为每个股票运行查询:

for i in stocks:
     queryTp = """SELECT date,close 
                  FROM %s _prices 
                  WHERE date >= '%s' """ % (i, datetime(2000,1,3))
问题是,当我在终端上运行时,查询被完美地存储在
queryTp

ipdb> queryTp
"\tSELECT\tdate,close \n    \t\t\t\tFROM san_prices \n    \t\t\t\tWHERE date >=
'2000-01-03 00:00:00' "
但是,在Jupyter笔记本上运行时,查询存储为

"\tSELECT\tdate,close FROM s_prices WHERE date >= '2000-01-03 00:00:00' "
起初我认为这与字符串格式化有关。然而,
datetime(2000,1,3)
的介绍很好。然后我意识到变量
I
不是迭代
stocks
值(即
'san',bbva',ele'
),而是迭代变量名。换句话说,当执行
打印(i)
时,我获得值“s”:

print(i)
's'  
对我有用。结果:

SELECT date,close 
                  FROM san _prices 
                  WHERE date >= '2000-01-03 00:00:00' 
SELECT date,close 
                  FROM bbva _prices 
                  WHERE date >= '2000-01-03 00:00:00' 
SELECT date,close 
                  FROM ele _prices 
                  WHERE date >= '2000-01-03 00:00:00' 
您在终端和笔记本上运行的python版本是什么

编辑: 你确定你正在用全部3只股票来测试这个吗?如果使用以下代码仅在一台计算机上进行测试:

stocks = ('san')
for i in stocks:
    queryTp = """SELECT date,close 
                  FROM %s _prices 
                  WHERE date >= '%s' """ % (i, datetime(2000,1,3))
    print(queryTp)
它实际上将返回:

SELECT date,close 
                  FROM s _prices 
                  WHERE date >= '2000-01-03 00:00:00' 
SELECT date,close 
                  FROM a _prices 
                  WHERE date >= '2000-01-03 00:00:00' 
SELECT date,close 
                  FROM n _prices 
                  WHERE date >= '2000-01-03 00:00:00' 
这是有意义的,因为“san”被视为iterable,因为字符串在每个字符上都是iterable。(例如,[abc'中的x代表x]返回['a'、'b'、'c'])如果只想在一只股票上测试代码,则应创建如下循环:

stocks = ('san',)
for i in stocks:
    queryTp = """SELECT date,close 
                  FROM %s _prices 
                  WHERE date >= '%s' """ % (i, datetime(2000,1,3))
    print(queryTp)
它返回一条语句:

SELECT date,close 
                  FROM san _prices 
                  WHERE date >= '2000-01-03 00:00:00' 

我也在使用jupyter笔记本,你的代码对我来说很好,你应该检查你的tupleThat是否有趣。您是否在终端上运行脚本或使用Jupyter笔记本?我正在运行包含Python 3.5.3的anaconda 4.0,我在一个笔记本中运行它,其中有一个3.6.1内核,但我没有看到经过编辑的版本!你说得对,我开始用3只股票,然后换成一只。非常感谢!很高兴帮忙:)祝你好运
SELECT date,close 
                  FROM san _prices 
                  WHERE date >= '2000-01-03 00:00:00'