如何在python中增加for循环中的变量

2024-06-28 11:32:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在建立一个谷歌表来跟踪我持有的股票的价格。我有一个运行的API,它连接到GoogleSheets和我自己的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) 

#这会将我的谷歌表中的值更新为以前的收盘价

对于每个单独的股票,我会复制和粘贴,更改股票符号,以找到下一个报价的价值。 我知道有一种方法可以使用语句来自动化这个过程。我尝试了以下方法,但无法根据需要进行更新。在这一点上,我遇到了一堵墙,我非常感谢任何关于如何使这个功能自动化的帮助或见解

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文件,但仅导入一个坐标。我不知道如何在FOR语句中每次增加sheet.update.cell(2,1,datavalue)中的“1”。我相信这是解决这个问题的办法,但如果有人有任何其他建议,我洗耳恭听


Tags: importurlvalueresponsecellsheet股票split
2条回答

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

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

这就是在for循环中递增计数器的方式,通常来说:

counter = 1

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

虽然计数器变量是大多数编程语言中使用的一种非常常见的模式(请参见Akib Rhast's answer),但更具python风格的方法是使用^{} builtin function

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返回一个元组时,基本上是同时将该元组上的每个元素分配给不同的变量

相关问题 更多 >