2013-02-08 140 views
4

我試圖創建一個程序,它將數據放入一個2 x 10的表格中,並將其放入文本文件中的數字中。然後程序需要在以後的迭代中檢索這些信息。但我不知道如何做到這一點。我一直在查看numpty命令,常規文件命令以及嘗試製作表格的方法。但我似乎無法得到任何這樣的工作。如何讀取和寫入表格/矩陣文件與Python?

這裏是我試圖使表的例子:

0 1 1 1 0 9 6 5 
5 2 7 2 1 1 1 0 

然後我會檢索這些值。什麼是這樣做的好方法?

+2

你必須定義「表」。它是一個具有四個空格分隔的數字文本文件嗎?或者它是一組在5個空格內左對齊的數字。它們不一樣,除非所有數字都是單個數字。 – 2013-02-08 20:23:36

回答

1

處理線一個接一個:

with open('filename') as f: 
    for ln in f: 
     a = [int(x) for x in ln.split()] 

或,以產生二維數組:

with open('filename') as f: 
    a = [[int(x) for x in ln.split()] for ln in f] 

由於Ord和弗朗西斯蒙特薩諾的意見

+1

'[[int(x)for ln.split()] for in in f.readlines()]' – Ord 2013-02-08 20:45:00

+2

'readlines()'不是必須的,如果文件太大會減慢代碼並填充很多記憶。最好使用'for ln in f:' – 2013-02-08 20:56:50

3

numpy應該足夠了

table = np.loadtxt(filename) 

這將有形狀(2,10)。如果您想將其置換,只需在關閉支架後添加.T即可

+2

我很確定大多數項目都希望避免使用'numpy'作爲依賴項... – 2013-02-08 21:08:28

+0

你爲什麼這麼認爲? – 2013-02-08 21:10:12

+1

這是一個沉重的項目,除非他在該矩陣上進行嚴格的數學計算,否則真的沒有理由使用numpy。不要誤解我的意思,這是一個偉大的圖書館。 OTOH,它看起來好像在探索問題中的選項,所以也許這就是要走的路。 – 2013-02-08 21:14:07

6

爲什麼不使用csv模塊?

table = [[1,2,3],[4,5,6]] 

import csv 

# write it 
with open('test_file.csv', 'w') as csvfile: 
    writer = csv.writer(csvfile) 
    [writer.writerow(r) for r in table] 

# read it 
with open('test_file.csv', 'r') as csvfile: 
    reader = csv.reader(csvfile) 
    table = [[int(e) for e in r] for r in reader] 

此方法還有其他程序(如Excel)可以讀取的文件。

哎呀,如果你真的需要它的空間或製表符分隔,只需將delimiter="\t"添加到您的讀者和作家的建設。