在python中使用exec从字符串获取列表

时间:2019-07-10 10:34:35

标签: python

我有:

"[15765,22832,15289,15016,15017]"

我想要:

[15765,22832,15289,15016,15017]

我应该怎么做才能将该字符串转换为列表?

P.S。未经我的允许,帖子已被编辑,并且丢失了重要的部分。类似于列表的行的类型为“字节”。这不是字符串。

P.S。 №2。我的初始代码是:

import urllib.request, re
f = urllib.request.urlopen("http://www.finam.ru/cache/icharts/icharts.js")
lines = f.readlines()

for line in lines:
    m = re.match('var\s+(\w+)\s*=\s*\[\\s*(.+)\s*\]\;',  line.decode('windows-1251'))
    if m is not None:
        varname = m.group(1)
        if varname == "aEmitentIds":
            aEmitentIds = line #its type is 'bytes', not 'string'

我需要从行中获取列表

网页上的

行看起来像

[15765, 22832, 15289, 15016, 15017]

3 个答案:

答案 0 :(得分:4)

假设s是您的字符串,则可以使用split并将每个数字转换为整数:

s = [int(number) for number in s[1:-1].split(',')]

有关拆分功能的详细信息: Python3 split documentation

答案 1 :(得分:3)

您所拥有的是一个字符串清单。您可以使用json解析器将该信息解析为相应的list

import json
test_str = "[15765,22832,15289,15016,15017]"
l = json.loads(test_str)  # List that you need.

或执行此操作的另一种方法是使用ast

import ast
test_str = "[15765,22832,15289,15016,15017]"
data = ast.literal_eval(test_str)

结果是

[15765, 22832, 15289, 15016, 15017]

要了解为什么使用eval()是不好的做法,可以参考this answer

答案 2 :(得分:2)

您还可以使用正则表达式从字符串中提取数字值,如下所示:

import re 
lst = "[15765,22832,15289,15016,15017]"
lst = [int(number) for number in re.findall('\d+',lst)]

上面代码的输出是

[15765, 22832, 15289, 15016, 15017]