2013-10-09 6 views
-2

Я работаю в Python 3.3.2. прямо сейчас я пытаюсь создать список списков из txt-файла. Например:Как создать список списка из txt-файла

У меня есть текстовый файл с этими данными:

361263.236 1065865.816 
361270.699 1065807.970 
361280.158 1065757.748 
361313.821 1065761.301 

Я хочу питон, чтобы создать список списков из этого текстового файла, поэтому мне нужен данные, чтобы выглядеть следующим образом: [[102547.879, 365478.456], [102547.658, 451658.263], [102658.878, 231456.454]]

Что мне делать?

Спасибо за внимание!

+2

Эти документы могут быть полезны для вас: [Чтение и запись файлов] (http://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files), [Списки ] (http://docs.python.org/3/tutorial/introduction.html#lists), ['str.split'] (http://docs.python.org/3/library/stdtypes.html#str .split) – Kevin

+0

Добро пожаловать в SO! Если вы хотите, чтобы кто-то потратил время и силы, необходимые для ответа на ваш вопрос, рекомендуется продемонстрировать свое время и усилия, прежде чем задавать вопрос. Это включает в себя то, что вы пробовали, методы, о которых вы слышали, но не понимаете, как их использовать, и что-то еще, что показывает, что вы пытаетесь найти решение для себя, прежде чем обратиться к SO. – Enigmadan

ответ

0

Это может сделать:

LofL = [] 
with open("path", "r") as txt: 
    while True: 
     try: 
      LofL.append(txt.readline().split(" ")) 
     except: 
      break 
+1

Это чрезвычайно неидиоматический Python. – chepner

2

Я поощрил бы использовать with заявление в новых программистов, это хорошая привычка.

def read_list(filename): 
    out = [] 
    # The `with` statement will close the opened file when you leave 
    # the indented block 
    with open(filename, 'r') as f: 
     # f can be iterated line by line 
     for line in f: 
      # str.split() with no arguments splits a string by 
      # whitespace charcters. 
      strings = line.split() 
      # You then need to cast/turn the strings into floating 
      # point numbers. 
      floats = [float(s) for s in strings] 
      out.append(floats) 
    return out 

В зависимости от размера файла, можно также вместо того, чтобы использовать out список, изменить его, чтобы использовать yield ключевое слово.

1
with open("data.txt","r") as fh: 
    data = [ [float(x), float(y)] for x,y in line.split() for line in fh ] 

Это тот случай, когда я думаю, что map является более удобным для чтения, хотя и имеет завернуть, что в вызове list в Python 3.x умаляет от него.

data = [ list(map(float, line.split())) for line in fh ] 
+1

Или просто '[[float (el) для el в row.split()] для строки в fh]' для эмуляции карты стиля 2.x (float, ...) ' –

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