是否有隔离字符串部分的方法?

问题描述 投票:1回答:3

我试图拆分字符串的某些部分,以完全隔离字符串的仅一部分。例如,在下面,我试图隔离金佰利公司的公开股价。

我尝试使用.split(),但是这意味着我只能从一侧隔离开盘价格。例如,如果看起来像这样,

'1. open': '131.8600', '2. high': '132.0500', '3. low': '131.7900', '4. close': '132.0400', '5. volume': '76708'}, '2019-11-01 15:55:00':

我只能使用.split()获得

131.8600','2. high': '132.0500', '3. low': '131.7900', '4. close': '132.0400', '5. volume': '76708'}, '2019-11-01 15:55:00':

例如

r = requests.get(https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=kmb&interval=5min&apikey=exampleapikey)

cont = json.loads(r.content.decode())

cont= str(cont)

ali = cont.split("{")


for x in range(9):
  if x!= 1 and x!=0: 
    print(ali[x]+"\n")

  else:
    x+=1   

返回

'2019-11-01 16:00:00':

'1. open': '131.8600', '2. high': '132.0500', '3. low': '131.7900', '4. close': '132.0400', '5. volume': '76708'}, '2019-11-01 15:55:00':

'1. open': '131.6600', '2. high': '131.8700', '3. low': '131.6500', '4. close': '131.8600', '5. volume': '46212'}, '2019-11-01 15:50:00':

'1. open': '131.8800', '2. high': '131.8800', '3. low': '131.6500', '4. close': '131.6500', '5. volume': '17977'}, '2019-11-01 15:45:00':

'1. open': '131.8800', '2. high': '131.9100', '3. low': '131.8500', '4. close': '131.8800', '5. volume': '9575'}, '2019-11-01 15:40:00':

'1. open': '131.7300', '2. high': '131.9050', '3. low': '131.7300', '4. close': '131.8800', '5. volume': '12393'}, '2019-11-01 15:35:00':

我似乎无法弄清楚。对于造成混淆的语言,我们事先表示歉意

python
3个回答
1
投票

您确实不应该使用字符串操作。 GET请求以可爱的JSON格式为您提供了可能想要的一切。利用这一优势:

def main():

    import requests
    import json

    url = "https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=kmb&interval=5min&apikey=exampleapikey"

    response = requests.get(url)
    assert response.status_code == 200
    data = json.loads(response.text)

    open_share_price = data["Time Series (5min)"]["2019-11-01 16:00:00"]["1. open"]
    print(open_share_price)

    return 0


if __name__ == "__main__":
    import sys
    sys.exit(main())

输出:

131.8600

0
投票

您是否尝试过这种方式?

r = requests.get("https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&symbol=kmb&interval=5min&apikey=exampleapikey")

cont = json.loads(r.content.decode())

cont= str(cont)

ali = cont.split("{")


for x in range(9):
  if x!= 1 and x!=0: 
    price=ali[x].split(':')[1].split(',')[0]
    print(price+"\n")

  else:
    x+=1   

0
投票

我假设每个条目都在单独的行中。如果不是,那么请准确显示三个连续的条目,且不修改任何字符。

问题是'}'和后面的'{']之间是否有清晰的分隔符>

这里我假设它是换行符(“ \ n”)

如果单引号是双引号,则{}之间的字符串似乎是JSON格式,因此如果将'替换为",则可以使用JSON进行解析。

for entry in cont.split("\n"):
    data = json.loads(entry.replace("'", '"'))
    open_value = float(data["1. open"))

如果没有换行符,而是两个条目之间只有一个空格,那么您可以执行以下操作:

for entry in cont.split("} {"):
    entry = entry.strip().replace("'", '"')
    if entry[0] != "{":
        entry = "{" + entry
    if entry[-1] != "}":
        entry += "}"
    data = json.loads(entry)
    open_value = float(data["1. open"))
    ...

如果'}'和'{'之间没有固定数量的空格字符,或者有其他任何字符,则可以使用re.split()

for entry in re.split(r'\}.*?\{', cont):
    entry = entry.strip().replace("'", '"')
    if entry[0] != "{":
        entry = "{" + entry
    if entry[-1] != "}":
        entry += "}"
    data = json.loads(entry)
    open_value = float(data["1. open"))
    ...
© www.soinside.com 2019 - 2024. All rights reserved.