2012-02-16 52 views
-2

我有k列數字的文件(每列有相同數量的元素)。什麼是最快的方式來讀取它並將數字保存在單獨的numpy.array中的每列中?從Python格式化文件中讀取數字

+0

嗨鮑勃,這功課嗎?如果可以,請將其標記爲這樣?另外,是否有任何源代碼可以向我們展示,以幫助我們理解自己嘗試了多少?您能否向我們展示您正在嘗試閱讀的文件樣本? – blahman 2012-02-16 05:18:17

回答

3

嘗試使用genfromtxt

這有利於您可以指定列名稱,如果您喜歡,甚至可以讀入recarray

我做了一個文件 'TMP':

1 2 3 4 5 
6 7 8 9 10 
11 12 13 14 15 
從numpy的

然後:

import numpy as np 
data = np.genfromtxt('tmp') 
#array([[ 1., 2., 3., 4., 5.], 
#  [ 6., 7., 8., 9., 10.], 
#  [ 11., 12., 13., 14., 15.]]) 

如果你看看help(np.genfromtxt)你會看到有各種選項,如指定自定義dtype S(所以如果需要可以重新陣列),設置缺失值的選項,讀取列名等。

+0

假設你知道列的數量,是否可以將列存儲到單獨的變量中? – Bob 2012-02-16 05:15:05

2
>>> import numpy as np 
>>> a = np.loadtxt('yourfile.txt') 
>>> print a 
[[ 1. 2. 3. 4. 5.] 
[ 6. 7. 8. 9. 10.] 
[ 11. 12. 13. 14. 15.]] 
>>> columns = dict(enumerate(a.T)) 
>>> columns[0] 
array([ 1., 6., 11.]) 
>>> columns[1] 
array([ 2., 7., 12.]) 
+0

請注意,您也可以簡單地使用'columns = a.T',因爲無論如何numpy數組都是行主要可迭代的。 – wim 2012-02-16 05:32:23

0

open()返回一個文件對象,最常用於兩個參數:open(filename,mode)。

F =開放( '/ TMP /工作文件', 'W') 打印˚F

第一個參數是包含了文件名的字符串。第二個參數是另一個包含幾個字符的字符串,用於描述文件的使用方式。模式可以是'r',只有文件將被讀取,'w'只能寫入(同名的現有文件將被刪除),'a'打開要附加的文件;寫入文件的任何數據都會自動添加到結尾。 'r +'打開文件以讀取和寫入。模式參數是可選的; 'r'將被假定,如果它被省略。

在Windows上,該模式附加的'b'以二進制模式打開文件,因此也有像'rb','wb'和'r + b'這樣的模式。 Windows上的Python區分了文本和二進制文件;數據讀取或寫入時,文本文件中的行尾字符會自動稍微改變。這種對文件數據的後臺修改對於ASCII文本文件來說很好,但它會破壞像JPEG或EXE文件中的二進制數據。在讀寫這些文件時要非常小心地使用二進制模式。在Unix上,向模式附加'b'並不會造成什麼影響,所以您可以在所有二進制文件中獨立使用它。