Как читать числа из файла в Python?

Я хотел бы читать числа из файла в двумерный массив.

Содержание файла:

  • строка, содержащая w, h
  • h строк, содержащих w целых чисел, разделенных пробелом

Например:

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

  • Как проверить, существует ли ключ в ** kwargs?
  • Почему числа в строке становятся «x0n», когда перед ними обратная косая черта?
  • Если range () является генератором в Python 3.3, почему я не могу вызвать next () в диапазоне?
  • метод сортировки
  • Изменение «предпочтительной кодировки локали»
  • Python: как проверить, был ли элемент добавлен в набор, без 2x (хэш, поиск)
  • Как использовать concurrent.futures с таймаутами?
  • Локальный охват, выходящий за рамки
  • 4 Solutions collect form web for “Как читать числа из файла в Python?”

    Предполагая, что у вас нет посторонних пробелов:

     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()]) 

    Вы могли бы сконденсировать последний цикл for во вложенном понимании списка:

     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 ++, где простой анализ текста может быть болью в прикладе, вы по достоинству оцените функционально единое решение, которое может дать вам python. Я бы сделал это очень просто с помощью нескольких встроенных функций и некоторых выражений генератора.

    Вам понадобятся open(name, mode) , myfile.readlines() , mystring.split() , int(myval) , и тогда вы, вероятно, захотите использовать пару генераторов, чтобы собрать их все вместе на питоновском пути ,

     # 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:]] 

    Посмотрите выражения генератора здесь . Они могут действительно упростить ваш код в отдельные функциональные блоки! Представьте, что вы делаете то же самое в 4-х строках на C ++ … Это был бы монстр. В частности, генераторы списков, когда я был парнем C ++, мне всегда хотелось, чтобы у меня было что-то подобное, и я часто создавал пользовательские функции для создания каждого типа массива, который я хотел.

    Не знаете, зачем вам нужно, 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.

    Эта программа дает матричное умножение в качестве приложения.

     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) 

    в качестве входного файла я беру 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 
    Python - лучший язык программирования в мире.