如何在python中的for循环中递增一个变量?

问题描述 投票:0回答:2

我建立一个谷歌表,以保持跟踪的股票价格,我自己的股票。我有一个API运行,连接到谷歌表和我自己的python应用程序。

我的谷歌表看起来像这样

Stock | Previous close

AAPL  | 316.73

NVDA  | 348.71

SPOT  | 191.00

我目前的代码运行如下。

import requests 
import gspread
from oauth2client.service_account import ServiceAccountCredentials 

sheet = client.open("Stock").sheet1
AAPL = sheet.cell(2,1).value
url = ('https://ca.finance.yahoo.com/quote/'+AAPL+'?p='+AAPL+'&.tsrc=fin-srch')
response = requests.get(url) 
htmltext = response.text
splitlist = htmltext.split("Previous Close")
afterfirstsplit =splitlist[1].split("\">")[2]
aftersecondsplit = afterfirstsplit.split("</span>")
datavalue = aftersecondsplit[0] 
sheet.update_cell(2,2,datavalue) 

# 这将更新值在我的谷歌表的前收盘价。

对于每只个股,我会复制和粘贴,改变股票符号,找到下一个报价的价值。我知道有一种方法可以使用FOR语句来自动化这个过程。我试着用下面的方法,但它不会根据需要更新。在这一点上,我达到了一堵墙,并将感谢任何帮助或见解,我可以自动这个功能。

tickers = {sheet.cell(2,1).value : [],
           sheet.cell(3,1).value : [],
           sheet.cell(4,1).value : [], 
           sheet.cell(5,1).value :[]}

for symbols in tickers: 

    url = ('https://ca.finance.yahoo.com/quote/'+symbols+'?p='+symbols+'&.tsrc=fin-srch')
    response = requests.get(url) 
    htmltext = response.text
    splitlist = htmltext.split("Previous Close")
    afterfirstsplit =splitlist[1].split("\">")[2]
    aftersecondsplit = afterfirstsplit.split("</span>")
    datavalue = aftersecondsplit[0]
    sheet.update.cell(2,1,datavalue)
    print (datavalue)

这样做收集当前股票价格的所有值,并将其导入excel文件,但只有一个坐标。我不知道如何增加'1'在sheet.update.cell(2,1,datavalue),每次在FOR语句内。我相信这是解决这个问题的方法,但如果任何人有任何其他建议,我所有的耳朵。

python for-loop google-sheets yahoo-finance
2个回答
2
投票

关于回答你的问题的这一部分,

"我不知道如何在sheet.update.cell(2,1,datavalue)中增加'1',每次在FOR语句中。"

通常来说,在for循环里面就是这样递增计数器的。

counter = 1

for symbol in tickers:
    #Your code
    sheet.update.cell(2,counter,datavalue)
    counter = counter+1

1
投票

虽然计数器变量在大多数编程语言中都是很常见的模式(参见 Akib Rhast的回答),更简单的方法是使用 enumerate 内置功能:

for column, symbol in enumerate(tickers, start=1):
    # do stuff
    sheet.update.cell(2,column,datavalue)

什么是 enumerate?

正如文件中所说。enumerate 接受一些可以迭代的东西(比如一个列表),然后返回一个元组,以计数器作为第一个元素,以迭代器中的元素作为第二个元素。

seasons = ['Spring', 'Summer', 'Fall', 'Winter']
list(enumerate(seasons, start=1))
# outputs [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

这样做的好处是可以节省内存,并且直接与你的循环联系在一起。

为什么在我的 for 循环?

这只是python中的语法糖,允许你解包一个元组或列表。

alist = [1, 2, 3]
first, second, third = alist
print(third) # outputs 3
print(second) # outputs 2
print(first) # outputs 1

enumerate 返回一个元组,你基本上是将该元组上的每个元素同时赋值给一个不同的变量。

© www.soinside.com 2019 - 2024. All rights reserved.