2015-07-08 3 views
-2

Я очень стараюсь в python.Python: размещение списков из файла в список

У меня есть файл со списком координат. похоже, что:

[-122.661927,45.551161], [-98.51377733,29.655474], [-84.38042879, 33.83919567]. 

я пытаюсь поместить это в список с:

with open('file.txt', 'r') as f: 
    for line in f: 
     list.append(line) 

В результате я получил это

['[-122.661927,45.551161], [-98.51377733,29.655474], [-84.38042879, 33.83919567]'] 

может Sombody помочь мне, как могу я избавиться от отметки «» в начале и конце списка?

+1

Как вы здесь положили, у вас на самом деле есть только одна линия. Вы должны улучшить свой код, чтобы манипулировать строкой и разбивать содержимое на строки. –

+0

извините, что я вставил его в worng, он находится в строках в файле – kasss

ответ

3

Попробуйте использовать ast.literal_eval.

Пример -

import ast 
lst = [] 
with open('file.txt', 'r') as f: 
    for line in f: 
     lst.extend(ast.literal_eval(line)) 

Из документации -

ast.literal_eval(node_or_string)

Safely evaluate an expression node or a Unicode or Latin-1 encoded string containing a Python literal or container display. The string or node provided may only consist of the following Python literal structures: strings, numbers, tuples, lists, dicts, booleans, and None.

Кроме того, обратите внимание на его плохое использование list в качестве имени переменного, как тень встроенной функции list.

+0

спасибо, я попробовал и получил ошибку: raise ValueError («неверный узел или строка:» + реестр (узел)) ValueError: неверный узел или строка: < _ast.Subscript объект в 0x0310EE50> имя списка было просто, например, так что было ясно, что это список, у него другое имя в реале :) – kasss

+0

можете ли вы напечатать 'line' и сообщить, какой результат? –

+0

@KasiaSawicka, если вход такой, как вы дали в вопросе, это должно сработать. Если он не работает, не могли бы вы обновить то, что выглядит 'line', для которого оно не работает? –

0

Использование ast.literal_eval для преобразования списка строк для вывода списка объектов, а также вы можете использовать список понимание в цикле над файловым объектом, который является более быстрым, чем петли питона и непосредственно возвращает список:

import ast 
with open('file.txt', 'r') as f: 
    my_list=[ast.literal_eval(line) for line in f] 
0
answer = [] 
with open('file.txt') as infile: 
    for line in infile: 
     line = line.strip().rstrip('.').replace('[', ' ').replace(']', ' ').replace(',', ' ') 
     parts = map(float, line.split()) 
     answer.extend(zip(parts, parts)) 

Ouput:

In [83]: answer 
Out[83]: 
[(-122.661927, 45.551161), 
(-98.51377733, 29.655474), 
(-84.38042879, 33.83919567)] 
+0

спасибо, но я хотел бы избавиться от "'" меток, и мне это понравилось [[-122.661927,45.551161], [-98.51377733,29.655474], [-84.38042879, 33.83919567 ]] – kasss

+0

@KasiaSawicka: Ack! Я забыл что-то сделать. Проверьте изменения! – inspectorG4dget

+0

это работает! Великий! большое спасибо:) – kasss

Смежные вопросы