Как конвертировать строку в список? - PullRequest
5 голосов
/ 24 февраля 2020

У меня есть файл, и он состоит из нескольких списков, как показано ниже

[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)

заранее спасибо

Ответы [ 5 ]

7 голосов
/ 24 февраля 2020

Вы можете попробовать это:

>>> 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 built- однако в eval() не рекомендуется использовать eval() для ненадежного кода, вместо этого используйте ast.literal_eval(), который работает только с очень ограниченными типами данных. Подробнее об этом см. Использование eval () python против ast.literal_eval ()?

1 голос
/ 24 февраля 2020

Вы можете использовать ast.literal_eval

>>> res = []
>>> with open('f.txt') as f:
...     for line in f:
...             res.append(ast.literal_eval(line))
0 голосов
/ 24 февраля 2020

Если каждая строка является допустимым 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]
0 голосов
/ 24 февраля 2020

вы можете использовать метод split () между скобками, вы можете дать символ для разделения на

между скобками дать символ, на который вы хотите его разделить Может быть так:

txt = "[234,343,234]/[23,45,34,5]/[354,45]/[]/[334,23]"        
x = txt.split("/")
0 голосов
/ 24 февраля 2020

Если строки предполагаются и предназначены для python литералов , вы можете просто ast.literal_eval(line).

В целях безопасности вы можете предположить, что они JSON значения вместо этого, и в этом случае json.loads(line) должен добиться цели.

...