2013-04-27 2 views
1

Я открываю файл .txt и должен использовать список внутри него для функции, которую я пишу. Это один из списков, указанных в текстовом файле:Как превратить «список строк» ​​в настоящий список?

'[24, 72, 95, 100, 59, 80, 87]\n' 

Использование .strip() он избавляется от \n, поэтому она становится:

'[24, 72, 95, 100, 59, 80, 87]' 

Я думаю, используя разделение было бы бесполезно, потому что с помощью split(' ') будут получены:

['[24, 72, 95, 100, 59, 80, 87]'] 

Который, я думаю, только углубляет осложнения. Что такое эффективный способ превратить этот «список строк» ​​в реальный список, с которым я мог бы использовать цикл for? Я уже несколько часов пробовал и не могу понять.

+0

Eval может по электронной использовать в этом случае – spicavigo

+1

Другим способом может быть JSON .load и сброс. Вы создаете файл с помощью json.dump и читаете его, используя его. Json.load – spicavigo

+0

'.split ('')' должен был создать '['[24,', '72,', '95,', '100,' , '59, ',' 80, ',' 87] '] ' – Aprillion

ответ

2

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

In [8]: strs='[24, 72, 95, 100, 59, 80, 87]\n' 

In [9]: from ast import literal_eval 

In [10]: literal_eval(strs) 
Out[10]: [24, 72, 95, 100, 59, 80, 87] 

помощь на ast.literal_eval:

In [11]: literal_eval? 
Type:  function 
String Form:<function literal_eval at 0xb6eaf6bc> 
File:  /usr/lib/python2.7/ast.py 
Definition: literal_eval(node_or_string) 
Docstring: 
Safely evaluate an expression node or a string containing a Python 
expression. The string or node provided may only consist of the following 
Python literal structures: strings, numbers, tuples, lists, dicts, booleans, 
and None. 
+0

Когда я использую оболочку Idle по умолчанию, она работает нормально, но когда я проснулся за ее пределами, скажу в папке, над которой я работаю, она возвращает ошибку «нет модуля с именем ast» –

+0

@HaileyMonette версия для python? –

+0

На самом деле вы правы, по какой-то причине Idle 2.5 запускался вместо 2.7.3, но это решение действительно работает, спасибо большое! –

0

Использование ast.literal_eval:

strs='[24, 72, 95, 100, 59, 80, 87]\n' 
list_of_strs = ast.literal_eval(strs) 

Далее помощь, оставьте комментарий ....

3

Ответ уже принят, но я просто хотел добавить это для записи. Модуль JSON очень хорошо для такого рода вещи:

import json 
s = '[24, 72, 95, 100, 59, 80, 87]\n' 
lst = json.loads(s) 
0

вам не нужно идти импортировать что-нибудь для этого

з = «[24, 72, 95, 100, 59, 80, 87]

s.translate (None, '[]'). раскол (', «) даст вам список номеров, которые являются строками

, если вы хотите получить список Интс попробуйте

[Int (я) для г в s.translate (None, '[]'). Сплит ('')]