【问题标题】:Making a variable equal to a list of strings in python使变量等于python中的字符串列表
【发布时间】:2018-06-12 22:51:32
【问题描述】:

我正在开发一个程序来解析来自多个网站的股票数据。我为每只股票使用的网站都是相同的,幸运的是,它们中的大多数都很容易为其生成 URL。

EX:Yahoo 的股票摘要页面 URL 是“https://finance.yahoo.com/quote/”+ticker+"?p="+ticker 我需要做的就是提示用户输入公司代码,然后我可以轻松生成一个可用的 URL 以使用 BeautifulSoup 进行解析

    ticker = input("Enter Company Ticker:")
    ticker = ticker.strip()
    URLyahooSum = "https://finance.yahoo.com/quote/"+ticker+"?p="+ticker
    print(URLyahooSum)

    >>> https://finance.yahoo.com/quote/CBG?p=CBG

这部分很简单,我可以运行程序来解析用户输入的单个代码的数据,但是,现在我试图将代码变量设置为等于将运行程序的一篮子代码在篮子中的每个单独的股票代码上,并将所有输出保存为不同的 .csv 文件,我可以将这些文件放入 SQL 数据库中,在那里我可以不断地对一篮子公司从最好到最差进行排名。

我试图一次征服一个方面,所以现在我只关心如何告诉程序为篮子中的每个股票单独设置“ticker”变量并运行直到它达到最后一个代码。

我已经在 .csv 文件的数据库中拥有我想要的公司股票代码篮,那么我如何告诉程序我希望“股票代码”等于这些公司中的每一个。并为每个代码运行程序。

【问题讨论】:

  • 现在我正在尝试将ticker变量设置为等于一篮子股票”是什么意思?
  • 我的意思是我希望程序在篮子中的每个股票代码上运行。例如,我希望程序在公司“a”上运行,输出结果,然后在公司“b”上运行(“a”和“b”在篮子中)。我的篮子是房地产投资信托基金,我正在将它们的解析数据收集在 csv 文件中,我可以使用 SQL 程序提取这些数据并基本上对它们进行排名。

标签: python pycharm read.csv


【解决方案1】:

如果我理解正确,您应该从 CSV 文件而不是用户输入中读取数据。

我假设您有一个简单的 CSV 文件,如下所示 [named: a.csv];

company,ticker
CBRE Group,CBG
Advanced Micro Devices,AMD
The Boeing Company, BA
Eli Lilly and Company, LLY
Xerox Corporation, XRX

要从文件中接收每个代码,您需要以下代码。

import csv
with open('a.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        print(row['ticker'].strip())

脚本的结果

>>> CBG
>>> AMD
>>> BA
>>> LLY
>>> XRX

由于我们可以从文件中接收数据,这里是脚本的最终版本:

import csv

with open('a.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        ticker = row['ticker'].strip()
        URLyahooSum = "https://finance.yahoo.com/quote/"+ticker+"?p="+ticker
        print(URLyahooSum)

这将为您提供以下输出:

>>> https://finance.yahoo.com/quote/CBG?p=CBG
>>> https://finance.yahoo.com/quote/AMD?p=AMD
>>> https://finance.yahoo.com/quote/BA?p=BA
>>> https://finance.yahoo.com/quote/LLY?p=LLY
>>> https://finance.yahoo.com/quote/XRX?p=XRX

【讨论】:

  • 感谢您的回答。现在的问题是如何让程序在每个代码上运行,一次一个。例如:在 CBG 上运行并输出结果,然后在 AMD 上运行并输出结果,依此类推。程序会不会一次只做一个?
  • @michaelharris 这是相同的逻辑。您可以从站点编写解析函数并将它们打印出来或保存到其他地方,而不是打印 url。如果您需要其他任何东西,我希望您提供更多详细信息,以便我提供帮助。
【解决方案2】:

如果您的列表中有代码 tickers_list,您可以这样做

for ticker in tickers_list:
    print("https://finance.yahoo.com/quote/"+ticker+"?p="+ticker)

这称为 for each 循环,ticker 变量将在循环的迭代中获取列表中每个项目的值。 因此,如果tickers_list = ['ABC', 'BBC', 'CBC'],这将使ticker 第一次迭代的值为“ABC”,第二次迭代为“BBC”,第三次迭代为“CBC”。

我认为这可能对你更有用,因为你可能有一个需要已经准备好使用的字符串的函数:

base_string = "https://finance.yahoo.com/quote/%s?p=%s"
for ticker in tickers_list:
    current_url = base_string % (ticker,ticker)
    my_function(current_url)

这称为字符串格式化,您在字符串中有一个占位符,稍后您将其填充。 base_string 中的每个 %s 都需要一个变量来填充它,这就是为什么在制作 current_url 时,百分号后跟两个 tickers。

【讨论】:

  • 这只是一个简单的列表,例如:ticker = [ABC, BBC, CBC, ...etc.]?
  • 没错。字符串列表:['ABC', 'BBC', 'CBC', ...]。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-25
  • 2011-09-30
  • 2011-12-10
  • 2020-12-13
  • 2018-06-21
相关资源
最近更新 更多