如何将字符串转换为列表?

5

我有一个文件,其中包含多个类似以下列表的内容

[234,343,234]
[23,45,34,5]
[354,45]
[]
[334,23]

我正在尝试逐行读取并将其附加到Python中的一个列表中。
如何实现?
到目前为止,我的尝试如下:
with open("pos.txt","r") as filePos:
    pos_lists=filePos.read()
new_list=[]
for i in pos_lists.split("\n"):
    print(type(i)) #it is str i want it as list
    new_list.extend(i)

print(new_list)

感谢您提前阅读。

1
这是一个文本文件吗? - Karthick Mohanraj
是的,它是一个文本文件。 - Shashikumar KL
1
你能展示一下你尝试过什么,以及哪里出了问题吗? - Diptangsu Goswami
这个回答解决了你的问题吗?将数字列表解析为Python列表 - Emily
很酷,ast.literal_eval() 运行良好。 - Shashikumar KL
5个回答

7
您可以尝试以下方法:
>>> from ast import literal_eval
>>> with open(YOURTEXTFILE) as f:
...    final_list = [literal_eval(elem) for elem in f.readlines()]
>>> final_list
[[234, 343, 234], [23, 45, 34, 5], [354, 45], [], [334, 23]]

或者,

>>> from ast import literal_eval
>>> with open(YOURTEXTFILE) as f:
...    final_list = sum(map(literal_eval, s.readlines()), [])
>>> final_list
[234, 343, 234, 23, 45, 34, 5, 354, 45, 334, 23]

无论您想要哪一个。

使用Python内置的eval()也可以完成同样的事情,但不建议在不信任的代码上使用eval(),而应该使用ast.literal_eval(),它仅适用于非常有限的数据类型。 有关更多信息,请参见使用python的eval()与ast.literal_eval()?


1
你可以使用 ast.literal_eval
>>> res = []
>>> with open('f.txt') as f:
...     for line in f:
...             res.append(ast.literal_eval(line))

0
如果这些行被假定并意图成为 Python 字面量,您只需使用ast.literal_eval(line)

出于安全考虑,您可能希望将其视为 JSON 值,这种情况下应使用 json.loads(line)


0

如果每行都是有效的JSON数组/对象,您可以使用jsonlines

import jsonlines
r = []
with jsonlines.open('input.jsonl') as reader:
    for line in reader:
        for item in line:
            r.append(item)
print(r)

输出:

[234, 343, 234, 23, 45, 34, 5, 354, 45, 334, 23]

-2

你可以使用split()方法,在括号中指定用于分割的符号。

在括号之间给出想要分割的符号,就像这样:

txt = "[234,343,234]/[23,45,34,5]/[354,45]/[]/[334,23]"        
x = txt.split("/")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接