如何在 python 中的 for 循环中递增变量
How to increment a variable within a for loop in python
我正在构建一个 google sheet 来跟踪我拥有的股票的股价。我有一个 API 运行 连接到 Google 表格和我自己的 python 应用程序。
我的googlesheet看起来像这样
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)
# 这会将我的 google sheet 中的值更新为之前的收盘价
对于每只股票,我会复制并粘贴,更改股票代码,以找到下一个报价的价值。
我知道有一种方法可以使用 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 文件,但仅导入一个坐标。我不知道如何在 FOR 语句中每次增加 sheet.update.cell(2,1,datavalue) 中的“1”。我相信这是解决这个问题的方法,但如果有人有任何其他建议,我会洗耳恭听。
关于回答这部分问题:
"I don't know how to increase the '1' within sheet.update.cell(2,1,datavalue), each time within the FOR statement."
通常来说,这就是在 for 循环中递增计数器的方式:
counter = 1
for symbol in tickers:
#Your code
sheet.update.cell(2,counter,datavalue)
counter = counter+1
虽然计数器变量是大多数编程语言中使用的一种非常常见的模式(请参阅 ), the more pythonic way to do it is by using the enumerate
builtin function:
for column, symbol in enumerate(tickers, start=1):
# do stuff
sheet.update.cell(2,column,datavalue)
什么是 enumerate
?
如文档所述,enumerate
采用可以迭代的内容(如列表)和 returns 元组,其中计数器作为第一个元素,迭代器中的元素作为第一个元素第二个元素:
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
returns 元组,您基本上是同时将该元组中的每个元素分配给不同的变量。
我正在构建一个 google sheet 来跟踪我拥有的股票的股价。我有一个 API 运行 连接到 Google 表格和我自己的 python 应用程序。
我的googlesheet看起来像这样
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)
# 这会将我的 google sheet 中的值更新为之前的收盘价
对于每只股票,我会复制并粘贴,更改股票代码,以找到下一个报价的价值。 我知道有一种方法可以使用 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 文件,但仅导入一个坐标。我不知道如何在 FOR 语句中每次增加 sheet.update.cell(2,1,datavalue) 中的“1”。我相信这是解决这个问题的方法,但如果有人有任何其他建议,我会洗耳恭听。
关于回答这部分问题:
"I don't know how to increase the '1' within sheet.update.cell(2,1,datavalue), each time within the FOR statement."
通常来说,这就是在 for 循环中递增计数器的方式:
counter = 1
for symbol in tickers:
#Your code
sheet.update.cell(2,counter,datavalue)
counter = counter+1
虽然计数器变量是大多数编程语言中使用的一种非常常见的模式(请参阅 enumerate
builtin function:
for column, symbol in enumerate(tickers, start=1):
# do stuff
sheet.update.cell(2,column,datavalue)
什么是 enumerate
?
如文档所述,enumerate
采用可以迭代的内容(如列表)和 returns 元组,其中计数器作为第一个元素,迭代器中的元素作为第一个元素第二个元素:
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
returns 元组,您基本上是同时将该元组中的每个元素分配给不同的变量。