Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中使用exec从字符串获取列表_Python - Fatal编程技术网

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

在python中使用exec从字符串获取列表,python,Python,我有: 我想: "[15765,22832,15289,15016,15017]" 如何将此字符串转换为列表 p.S.的帖子未经我许可就被编辑了,失去了重要部分。看起来像列表的行的类型是“字节”。这不是字符串 附言。№2.我最初的代码是: [15765,22832,15289,15016,15017] 我需要从电话里拿到名单 网页中的行看起来像 import urllib.request, re f = urllib.request.urlopen("http://www.finam.ru/

我有:

我想:

"[15765,22832,15289,15016,15017]"
如何将此字符串转换为列表


p.S.的帖子未经我许可就被编辑了,失去了重要部分。看起来像列表的行的类型是“字节”。这不是字符串

附言。№2.我最初的代码是:

[15765,22832,15289,15016,15017]
我需要从电话里拿到名单

网页中的行看起来像

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'

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

[15765, 22832, 15289, 15016, 15017]
有关拆分功能的详细信息:

您拥有的是一个字符串化列表。您可以使用
json
解析器将该信息解析到相应的
列表中

s = [int(number) for number in s[1:-1].split(',')]
或者另一种方法是使用
ast

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

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

要理解为什么使用
eval()
是不好的做法,您可以参考,也可以使用regex从字符串中提取数值,如下所示:

[15765, 22832, 15289, 15016, 15017]
上述代码的输出为

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

您可以导入json并执行good_list=json。加载@Wonka编写的内容和
ast.literal_eval
都是最佳选项。请不要使用
eval
exec
您可以使用拆分功能来执行此操作,有关详细信息,请查看下面的我的答案。帖子未经我的许可进行了编辑,并且丢失了重要部分。看起来像列表的行的类型是“字节”。这不是字符串。批准编辑是显式授予他们您的权限。可以而且应该拒绝进行不正确更改的建议编辑。此返回字符串不是整数。您应该在[1:-1]中使用此
[int(i)for i].split(',')]
`未经我的许可编辑了这篇文章,它丢失了重要部分。看起来像列表的行的类型是“字节”。这不是字符串。在问题中,它表示“到处都是字符串”。甚至这个问题的名称也在询问如何将字符串转换为列表。也许你可以投票选出最适合这个问题的答案,然后创建一个新的问题,清楚地解释你的观点@DeepSpace@DeepSpace请编辑您的问题并插入您想要转换的确切类型,好吗?(如果是这样的话,也请更改标题)@LucasWieloch我不认为在很长一段时间后,在一个问题上有很大的机会是一件值得欣赏的事情。在我看来,正确的方法就是把一个答案标记为最好的答案,然后开始一个全新的问题。输入文件是一个JS文件。如果JSON包含
Infinity
或计算,则解析为JSON将失败。如果列表中也包含计算或变量,则这些操作也可能失败。
[15765, 22832, 15289, 15016, 15017]