如何从Python中的文件读取数字?

我想从文件读取数字到二维数组。

文件内容:

  • 包含w,h的行
  • 包含用空格分隔的整数的h行

例如:

4 3 1 2 3 4 2 3 4 5 6 7 8 9 

假设你没有无关的空格:

 with open('file') as f: w, h = [int(x) for x in next(f).split()] # read first line array = [] for line in f: # read rest of lines array.append([int(x) for x in line.split()]) 

你可以将最后一个循环压缩成一个嵌套的列表理解:

 with open('file') as f: w, h = [int(x) for x in next(f).split()] array = [[int(x) for x in line.split()] for line in f] 

对我来说,这种看似简单的问题就是Python的全部。 特别是如果你是来自像C ++这样的语言,那么简单的文本parsing可能会让人困惑,你会非常欣赏python可以为你提供的function上的单位解决scheme。 我会保持简单的几个内置函数和一些生成器expression式。

你需要open(name, mode)myfile.readlines()mystring.split()int(myval) ,然后你可能会想要使用几个生成器以pythonic的方式把它们放在一起。

 # This opens a handle to your file, in 'r' read mode file_handle = open('mynumbers.txt', 'r') # Read in all the lines of your file into a list of lines lines_list = file_handle.readlines() # Extract dimensions from first line. Cast values to integers from strings. cols, rows = (int(val) for val in lines_list[0].split()) # Do a double-nested list comprehension to get the rest of the data into your matrix my_data = [[int(val) for val in line.split()] for line in lines_list[1:]] 

在这里查找生成器expression式。 他们真的可以将您的代码简化为离散的function单元! 想象一下,在C ++的4行中做同样的事情…这将是一个怪物。 特别是列表生成器,当我是C ++的人时,我总是希望自己有这样的东西,而且我最终会build立自定义函数来构造我想要的每一种数组。

不知道为什么你需要w,h。 如果这些值实际上是必需的,并且意味着只能读取指定数量的行和列,则可以尝试以下操作:

 output = [] with open(r'c:\file.txt', 'r') as f: w, h = map(int, f.readline().split()) tmp = [] for i, line in enumerate(f): if i == h: break tmp.append(map(int, line.split()[:w])) output.append(tmp) 
 with open('in.txt') as f: data = [] cols,rows=map(int, f.readline().split()) for i in range(0, rows): data.append(map(float, f.readline().split()[:cols])) print data 

我更新了代码,并且显示与其他答案不同,此方法适用于初始in.text文件中的任意数量的matrix。

这个程序产生matrix乘法作为一个应用程序。

 import numpy as np def printMatrix(a): print "Matrix["+("%d" %a.shape[0])+"]["+("%d" %a.shape[1])+"]" rows = a.shape[0] cols = a.shape[1] for i in range(0,rows): for j in range(0,cols): print "%7g" %a[i,j], print print def readMatrixFile(FileName): data = [] rows,cols=map(int, FileName.readline().split()) for i in range(0, rows): data.append(map(float, FileName.readline().split()[:cols])) a = np.array(data) return a f = open('in.txt') a=readMatrixFile(f) printMatrix(a) b=readMatrixFile(f) printMatrix(b) a1=readMatrixFile(f) printMatrix(a1) b1=readMatrixFile(f) printMatrix(b1) f.close() print "matrix multiplication" c = np.dot(a,b) printMatrix(c) c1 = np.dot(a1,b1) printMatrix(c1) 

作为input文件我采取in.txt:

 4 4 1 1 1 1 2 4 8 16 3 9 27 81 4 16 64 256 4 3 4.02 -3.0 4.0 -13.0 19.0 -7.0 3.0 -2.0 7.0 -1.0 1.0 -1.0 3 4 1 2 -2 0 -3 4 7 2 6 0 3 1 4 2 -1 3 0 9 1 -11 4 -5 

和输出如下所示:

 Matrix[4][4] 1 1 1 1 2 4 8 16 3 9 27 81 4 16 64 256 Matrix[4][3] 4.02 -3 4 -13 19 -7 3 -2 7 -1 1 -1 Matrix[3][4] 1 2 -2 0 -3 4 7 2 6 0 3 1 Matrix[4][2] -1 3 0 9 1 -11 4 -5 matrix multiplication Matrix[4][3] -6.98 15 3 -35.96 70 20 -104.94 189 57 -255.92 420 96 Matrix[3][2] -3 43 18 -60 1 -20