Как читать данные из файла в массив с помощью Python? - PullRequest
0 голосов
/ 12 марта 2019

Мне нужно как-то прочитать данные в массив, чтобы выполнить расчеты с каждым числом.

У меня есть .txt файл в следующем формате.

4
1 2 3 4
2 4 6 8
3 6 9 12
4 8 12 16

Структура зависит от числа в первой строке, здесь оно 4. Это означает, что это 4x4 матрица.

Теперь, я полагаю, что для предварительного вычисления расчетов с каждым числом было бы проще сохранить матрицу в двумерном массиве. Таким образом, каждый элемент будет доступен через индексы массива, такие как:

data[i][j]

Где data[4][3] = 16

Как извлечь данные в такой массив? У меня тут проблемы.

Я пытался следовать

def get_data(file):

with open(file) as f:
    N = f.readline()
data = [line.strip('\n') for line in open(file)]

но сохраняет каждую строку в месте индекса. Итак, у меня есть data[1] = ['1 2 3 4'], используя этот метод.

Обратите внимание, что каждое число разделено пробелом, и в конце каждой строки есть символ новой строки \n.

Ответы [ 2 ]

0 голосов
/ 12 марта 2019

Вы можете открыть файл в режиме чтения с помощью:

file = open("new_text", "r")

, затем прочитать каждую строку в файле как:

for each_line in file:
    print(each_line)

, чтобы создать матрицу, которую вы можете записать как:

matrix = []

for each_line in file:
    matrix.append(each_line.split()) #each_line.split will make a array and then we append this in matrix

print(matrix)

Обратите внимание, что здесь в качестве первого элемента матрицы у нас есть 4, который считывается из файла, чтобы удалить элемент, который мы можем использовать метод pop ().

0 голосов
/ 12 марта 2019

Ты рядом.Вам просто нужно пойти дальше и разделить каждую строку, которую вы читаете, в отдельный список.Кроме того, вам также необходимо преобразовать ваши данные в целые числа:

def get_data(file):
    with open(file) as f:
        data = [line.split() for line in list(f)]
        return [[int(el) for el in line] for line in data]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...