Как прочитать матрицу из заданного файла? - PullRequest
11 голосов
/ 01 октября 2011

У меня есть текстовый файл, который содержит матрицу размеров N * M.

Например, файл input.txt содержит следующее:

0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0
0,0,2,1,0,2,0,0,0,0
0,0,2,1,1,2,2,0,0,1
0,0,1,2,2,1,1,0,0,2
1,0,1,1,1,2,1,0,2,1

Мне нужно написать скрипт на Python, гдеЯ могу импортировать матрицу.

Мой текущий скрипт Python:

f = open ( 'input.txt' , 'r')
l = []
l = [ line.split() for line in f]
print l

список вывода выглядит следующим образом

[['0,0,0,0,0,0,0,0,0,0'], ['0,0,0,0,0,0,0,0,0,0'], ['0,0,0,0,0,0,0,0,0,0'],
 ['0,0,0,0,0,0,0,0,0,0'], ['0,0,0,0,0,0,0,0,0,0'], ['0,0,0,0,0,0,0,0,0,0'],
 ['0,0,2,1,0,2,0,0,0,0'], ['0,0,2,1,1,2,2,0,0,1'], ['0,0,1,2,2,1,1,0,0,2'],
 ['1,0,1,1,1,2,1,0,2,1']]

Мне нужно получить значения вв форме.Если я пытаюсь набрать приведение, он выдает ошибки.

Ответы [ 7 ]

24 голосов
/ 01 октября 2011

Рассмотрим

with open('input.txt', 'r') as f:
    l = [[int(num) for num in line.split(',')] for line in f]
print(l)

производит

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 2, 1, 0, 2, 0, 0, 0, 0], [0, 0, 2, 1, 1, 2, 2, 0, 0, 1], [0, 0, 1, 2, 2, 1, 1, 0, 0, 2], [1, 0, 1, 1, 1, 2, 1, 0, 2, 1]]

Обратите внимание, что вам нужно разделить запятыми.


Если у вас есть пустые строки, измените

l = [[int(num) for num in line.split(',')] for line in f ]

до

l = [[int(num) for num in line.split(',')] for line in f if line.strip() != "" ]
12 голосов
/ 05 января 2017

Вы можете просто использовать numpy.loadtxt . Прост в использовании, вы также можете указать свой разделитель, типы данных и т. Д.

В частности, все, что вам нужно сделать, это:

import numpy as np
input = np.loadtxt("input.txt", dtype='i', delimiter=',')
print(input)

И результат будет:

[[0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]
 [0 0 0 0 0 0 0 0 0 0]
 [0 0 2 1 0 2 0 0 0 0]
 [0 0 2 1 1 2 2 0 0 1]
 [0 0 1 2 2 1 1 0 0 2]
 [1 0 1 1 1 2 1 0 2 1]]
2 голосов
/ 07 сентября 2014

Вы можете сделать это:

fin = open('input.txt','r')
a=[]
for line in fin.readlines():
    a.append( [ int (x) for x in line.split(',') ] )
1 голос
/ 31 октября 2017

Проверьте этот маленький однострочный код для чтения матрицы,

matrix = [[input() for x in range(3)] for y in range(3)]

этот код будет читать матрицу порядка 3 * 3.

1 голос
/ 07 сентября 2014

Вы не должны писать свой парсер csv, учитывайте модуль csv при чтении таких файлов и используйте оператор with для закрытия после прочтения:

import csv

with open('input.txt') ad f:
    data = [map(int, row) for row in csv.reader(f)]
1 голос
/ 01 октября 2011

Следующее делает то, что вы хотите:

l = []
with open('input.txt', 'r') as f:
  for line in f:
    line = line.strip()
    if len(line) > 0:
      l.append(map(int, line.split(',')))
print l
0 голосов
/ 14 февраля 2019
import numpy as np
f = open ( 'input.txt' , 'r')
l = []
l = np.array([ line.split() for line in f])
print (l)
type(l)

выход:

[['0']  ['0']  ['0']  ['0,0,0,0,0,0,0,0,0,0,0'] 
    ['0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0'] 
['0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0']] 

numpy.ndarray

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...