2015-04-21 2 views
1

Очень новый для python. Скажем, у меня есть txt-файл, содержащий матрицу.Импортировать матрицу из .txt-файла с форматом

matrix.txt

A A A B B C 
D D C D A E 
A D S A W A 

Теперь я хочу, чтобы импортировать эту матрицу в моей питона программе, так что я могу иметь дело с данными. Теперь вопрос в том, как я должен добавить к каждой строке матрицы?

Что я пробовал:

file_object = open('matrix.txt', 'r') 
try: 
    line = file_object.readline() 
    while line: 
     print line 
     line = file_object.readline() 
     line = line.strip() 
     string = [] 
     string.append(line) 
     print string 
finally: 
    file_object.close() 
print string[0][1] 

Edit: Особое положение:

A A A B B C   A A A B B C 
    D C D A E ---> 0 D C D A E 
    D A W A   0 D 0 A W A 

Так что, если некоторые элементы равны нулю, как я мог заменить их с 0?

+0

Вы не имеете никакого смысла в своем вопросе. Добавить строки в Python? Вы ничего не добавляете к языку. –

+0

Извините, я сделал опечатку. :) –

+0

Как вы знаете, объекты файла являются итерируемыми, что позволяет использовать цикл for для получения каждой строки внутри файла, а не этого неясного цикла while. –

ответ

2

НЕМНОГО исчерпывающий код с пояснениями:

#define a separator which divides your elements 
sep = ' ' 
matrix = [] 
with open('matrix.txt', 'r') as f: 
    for line in f: 
     # generate an array with the elements which are on the line 
     line_array = line.split(sep) 

     #append it to the matrix 
     matrix.append(line_array) 

print matrix 

Для того, чтобы лучше понять 'с' заявление, прочитал this, это помогло мне.

Редактировать: Для того, чтобы соответствовать двойные разделители в качестве объекта ноль (нет), замените line_array ассоциацию с:

line_array = [e or 0 for e in line.split(sep)] 

Пример набора данных (обратите внимание, двойное пространство между B и C):

A A A B C 
D D C D A E 
A D S A W A 

Edit 2: Для платформы независимой линии окончаний, использование:

line_array = [e or 0 for e in line.splitlines()[0].split(sep)] 
+0

Если некоторые элементы матрицы равны нулю, как заменить элемент на 0? –

+0

Что вы подразумеваете под "is nill"? Как это будет представлено в вашем наборе данных? В случае двух элементов, разделенных двумя вместо одного разделителя, см. Ответ. – AllBlackt

+0

Эх, почему у меня что-то странное? что-то вроде закодировано. –

1
with open('matrix.txt') as data: 
    matrix = [i.split() for i in data] 
+0

Спасибо Малик. Если некоторые элементы матрицы являются 'nil', как я могу заменить элемент на' 0'? –

+0

Просто позвольте мне изменить его. –

+0

См. Мое редактирование. К сожалению, это не работает. 'Matrix [2] [0]' должно быть '0', но в вашем случае это' D'. –

0

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

matrix = [] 
for lines in open('matrix.txt', 'r'): 
    matrix.append(lines.split()) 
+0

Если некоторые элементы матрицы равны нулю, как я могу заменить элемент на 0? –

+0

@Wongzigii Не могли бы вы предоставить входной файл для такой ситуации? – kvorobiev

+0

См. Мои правки, пожалуйста. –

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