2012-02-16 34 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'并不会造成什么影响,所以您可以在所有二进制文件中独立使用它。

相关问题