从Python中读取格式化文件中的数字

时间:2012-02-16 04:57:19

标签: python input numpy

我的文件有k列数字(每列的元素数量相同)。读取它并在单独的numpy.array中保存每列中的数字的最快方法是什么?

3 个答案:

答案 0 :(得分: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(因此您可以根据需要进行重新排列),设置缺失值的选项,读入列名字等。

答案 1 :(得分: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.])

答案 2 :(得分:0)

open()返回一个文件对象,最常用的有两个参数:open(filename,mode)。

  
    
      

f = open('/ tmp / workfile','w')       打印f

    
  

第一个参数是包含文件名的字符串。第二个参数是另一个字符串,其中包含一些描述文件使用方式的字符。当只能读取文件时,模式可以是'r',仅写入的'w'(将删除具有相同名称的现有文件),'a'打开文件以进行追加;写入文件的任何数据都会自动添加到最后。 'r +'打开文件进行读写。 mode参数是可选的;如果省略,则会假设'r'。

在Windows上,附加到模式的'b'以二进制模式打开文件,因此还有'rb','wb'和'r + b'等模式。 Windows上的Python区分了文本和二进制文件;读取或写入数据时,文本文件中的行尾字符会自动稍微改变。这种对文件数据的幕后修改适用于ASCII文本文件,但它会破坏像JPEG或EXE文件中的二进制数据。在读取和写入此类文件时要非常小心地使用二进制模式。在Unix上,将'b'附加到该模式并没有什么坏处,因此您可以将它独立于平台用于所有二进制文件。