2016-10-03 3 views
2

Я читаю данные из текстового файла. Каждая линия моих данных имеют следующую структуруЧтение строк из текста в виде списка в Python

(110, 'Math', 1, 5) 
(110, 'Sports', 1, 5) 
(110, 'Geography', 4, 10) 
(112, 'History', 1, 9) 
.... 

и когда я читаю данные из файла он обрабатывается как строка. Поэтому для всех строк я анализирую данные в списке строк. Однако я хочу создать список списков с 4 различными элементами (intengers и strings). Как я могу прочитать файл elementwise и не анализировать его как строку?

Мой код для чтения файла выглядит следующим образом:

data1 = [line.strip() for line in open("data.txt", 'r')] 

ответ

6

Предполагая, что формат всегда, как вы описали (т.е. соответствует синтаксису Python кортежей), то это легко сделать с ast.literal_eval():

>>> ast.literal_eval("(110, 'Math', 1, 5)") 
(110, 'Math', 1, 5) 

Таким образом, полный код:

import ast 
with open('data.txt') as fp: 
    data = [ast.literal_eval(line) for line in fp] 
+0

@Chris_Rands, еще лучше сделать генератор. – skovorodkin

+0

Генератор @skovorodkin лучше, но это выходит за рамки и уходит как упражнение :) – bereal

+0

Или 'map (ast.literal_eval, fp)'. –

1

Выполните следующие:

data1 = [line.strip(')').strip('(').split() for line in open("data.txt", 'r')] 
+0

Есть ли способ, которым я могу читать числа как целые числа? – konstantin

+0

применяют их к целым числам, используя 'int (number)' – MMF

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