我建立一个谷歌表,以保持跟踪的股票价格,我自己的股票。我有一个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语句内。我相信这是解决这个问题的方法,但如果任何人有任何其他建议,我所有的耳朵。
关于回答你的问题的这一部分,
"我不知道如何在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
虽然计数器变量在大多数编程语言中都是很常见的模式(参见 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
返回一个元组,你基本上是将该元组上的每个元素同时赋值给一个不同的变量。