Как прочитать матрицу из файла?
у меня есть текстовый файл, который содержит матрицу N * M измерений.
например, ввод.текстовый файл содержит следующее:
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']]
мне нужно получить значения в форме int . Если я пытаюсь ввести cast, он выдает ошибки.
6 ответов
считают
f = open ( 'input.txt' , 'r')
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() != "" ]
Вы можете просто использовать 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]]
следующий делает то, что вы хотите:
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
вы можете сделать это:
fin = open('input.txt','r')
a=[]
for line in fin.readlines():
a.append( [ int (x) for x in line.split(',') ] )
- вы не должны писать свой парсер CSV-файл, рассмотрим!--1-- > модуль при чтении таких файлов и использовании with
заявление для закрытия после чтения:
import csv
with open('input.txt') ad f:
data = [map(int, row) for row in csv.reader(f)]
проверьте этот маленький код одной строки для чтения матрицы,
matrix = [[input() for x in range(3)] for y in range(3)]
этот код будет читать матрицу порядка 3*3.