2015-04-21 84 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 

現在我想這個矩陣導入到我的Python程序,這樣我可以處理數據。 現在的問題是我該如何追加每行矩陣?

我試了一下:

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] 

編輯:特殊情況:

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循環來檢索文件中的每一行,而不是在循環中隱藏。 –

回答

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 

編輯2: 對於平臺獨立的行尾,使用:

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

如果矩陣的某些元素爲零,我如何用0替換元素? –

+0

你是什麼意思是「n」?這將如何在您的數據集中表示?對於兩個項目分隔兩個而不是一個分隔符的情況,請參閱響應。 – AllBlackt

+0

呃,爲什麼我有些奇怪?類似編碼的東西。 –

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

謝謝馬利克。如果矩陣的某些元素是'nil',我怎樣才能用'0'替換元素? –

+0

容易讓我改變它。 –

+0

看我的編輯。不幸的是,這不起作用。 '矩陣[2] [0]'應該是'0',但在你的情況下,它是'D'。 –

0

您可以使用

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

如果矩陣的某些元素爲零,我如何用0替換元素? –

+0

@Wongzigii你能提供這種情況的輸入文件嗎? – kvorobiev

+0

請參閱我的編輯。 –