Как записать матрицу / 2D-массив в текстовый файл python
Используя Python, мне нужно записать 2d матрицу в файл, чтобы позволить следующей команде легко ее прочитать:
Проблема
Я пытался file.write(str(matrix)) , и он пишет это хорошо, но это не так, как мне нужно, чтобы потом извлечь данные.
У меня есть следующее:
Ожидаемое решение
Что я хочу, чтобы файл был;
3 ответа
Вы можете преобразовать отдельные строки вашей матрицы в строки, разделенные пробелами, и записать их в текстовый файл.
Вы можете использовать numpy.savetxt:
Если вам просто нужно записать данные и позже получить их из программы на Python, ограничение «текстового» файла только усложнит ситуацию.
Это потому, что Python поставляется с модулем pickle , который может сериализовать все виды объектов, которые имеют смысл быть сериализуемыми, и впоследствии извлекать их из файла без проблем.
В этом случае, если ваша «матрица» находится в переменной с этим именем, весь код, который вам нужен:
И получить его позже:
Теперь, если вам нужно, чтобы текст читался и читался человеком, а ваши матрицы просто В списках внутри списков с числовыми элементами и без произвольных объектов модуль json будет работать точно так же и создавать файл, который не только читается человеком, но и может быть понят под множеством других языков и библиотек:
выкатываете собственный код
Конечно, для целей обучения и для полного понимания программы возможность написать собственную матрицу и прочитать ее обратно — бесценное упражнение. Просто имейте в виду, что это полезно для обучения и тренировок, но не хорошо, если это всего лишь малая часть проблемы реального мира — это будет изобретением колеса в деталях, и вам следует использовать один из методов, описанных выше.
Для DIY сначала плохая новость: файл, а также текстовый файл могут принимать все, что вы пишете в него. Таким образом, вы должны определить соглашения о том, какие символы вы будете использовать для указания размера матрицы, если он не всегда фиксирован в 3×3, и позаботиться об этом при записи и чтении. (обратите внимание, что вы можете просто добавить вывод repr для своей матрицы, используя eval для ее содержимого при чтении — для литеральных значений Python это будет работать, но тогда вы можете просто использовать pickle или json) ,
Поскольку вы задали желаемый результат в вопросе, это облегчает задачу: мы будем использовать числа, разделенные пробелами, по одной строке файла для каждой строки в матрице.
Это просто вопрос создания внешней матрицы, чтения строки из файла, вызова .split для нее, чтобы у вас была одна строка, содержащая каждое число, сопоставить каждый из этих токенов через «int» и создать новый список, это одна из строк.
То есть шаг за шагом:
Или с использованием выразительности Python и списочного понимания, один и тот же код в одной строке:
Запись файла
Записать такой файл так же просто, как перебирать элемент за элементом вашей матрицы и выводить его на диск:
Это добавляет дополнительный «» в конце каждой строки, но есть несколько подходов, чтобы избежать этого. Одним из простых способов было бы составить строку как строку, используя методы форматирования строки Python.
Как записать матрицу / 2D-массив в текстовый файл python
Используя Python, мне нужно записать 2-мерную матрицу в файл, чтобы следующая команда могла легко ее прочитать:
Проблема
я пытался file.write(str(matrix)) и он пишет это нормально, но не кладет его так, как мне нужно, чтобы позже извлечь данные.
У меня есть следующее:
Ожидаемое решение
Что я хочу иметь в файле;
3 ответа
Вы можете преобразовать отдельные строки вашей матрицы в строки, разделенные пробелами, и записать их в текстовый файл.
Если вам просто нужно записать данные и получить их позже из программы Python, ограничение «текстового» файла только усложняет ситуацию.
Это потому, что Python поставляется с pickle модуль, который может сериализовать все виды объектов, которые имеют смысл сериализовать, и беспрепятственно извлекать их позже из файла.
В этом случае, если ваша «матрица» находится на переменной с таким именем, весь необходимый вам код:
И чтобы получить его позже:
Теперь, если вам нужно, чтобы он был текстовым и удобочитаемым, а ваши матрицы представляют собой просто списки в списках с числовыми элементами, а не произвольные объекты, json Модуль будет работать точно так же и создавать файл, который не только читается человеком, но и может быть понят на множестве других языков и библиотек:
развертывание собственного кода
Конечно, для учебных целей и получения настоящего твердого понимания программы возможность написать свою собственную матрицу и прочитать ее — бесценное упражнение. Просто имейте в виду, что это полезно для обучения и тренировок, но плохо, если это всего лишь малая часть проблемы реального мира — это будет изобретать велосипед вместо детали, и вам следует использовать один из описанных выше методов.
Для DIY сначала плохие новости: файл, как и текстовый файл, может принимать все, что вы в него пишете. Таким образом, вы должны изложить соглашения о том, какие символы вы будете использовать для обозначения размера матрицы, если он не всегда фиксируется в 3×3, и позаботьтесь об этом при записи и чтении. (обратите внимание, что вы можете просто repr вывод для вашей матрицы, использование eval на его содержимое при чтении — для буквальных значений Python это сработает, но тогда вы можете просто использовать pickle или json).
Поскольку вы написали желаемый результат в вопросе, это упрощает: мы будем использовать числа, разделенные пробелами, по одной строке файла для каждой строки в матрице.
Это просто вопрос создания внешней матрицы, чтения строки из файла, вызова .split на нем, чтобы у вас была одна строка, содержащая каждое число, сопоставьте каждый из этих токенов через «int» и создайте новый список, который является одной из строк.
То есть пошагово:
Или, используя выразительность Python и понимание списков, тот же код в одной строке:
Запись файла
Написать такой файл так же просто, как взаимодействовать элемент за элементом вашей матрицы и выводить его на диск:
В конце каждой строки будет записан дополнительный символ » «, но есть несколько способов избежать этого. Один из самых простых способов — составить строку как строку с использованием методов форматирования строки Python.
Примеры работы с текстовыми файлами
В данной теме представлены примеры записи и чтения информации для текстовых файлов.
Содержание
- 1. Чтение/запись списка, содержащего n целых чисел
- 2. Чтение/запись списка, содержащего строки
- 3. Чтение/запись кортежа, содержащего объекты чисел с плавающей запятой
- 4. Чтение/запись кортежа содержащего разнотипные объекты
- 5. Чтение/запись словаря
- 6. Чтение/запись двумерной матрицы целых чисел, представленной в виде списка
- 7. Чтение/запись множества, которое содержит целые числа
- 8. Чтение/запись данных разных типов: список и кортеж
Поиск на других ресурсах:
1. Чтение/запись списка, содержащего n целых чисел
В примере демонстрируются следующие операции:
- создание списка из 10 случайных чисел;
- сохранение списка в текстовом файле;
- чтение из файла в новый список с целью контроля.
Текст программы следующий:
Результат работы программы
2. Чтение/запись списка, содержащего строки
При чтении/записи строк не нужно реализовывать дополнительные преобразования из одного типа в другой, так как данные из файла читаются в виде строк.
Результат работы программы
3. Чтение/запись кортежа, содержащего объекты чисел с плавающей запятой
Пример демонстрирует запись и чтение кортежа, который содержит объекты чисел с плавающей запятой.
Результат работы программы
Вид файла myfile5.txt
4. Чтение/запись кортежа содержащего разнотипные объекты
В случае, если кортеж содержит объекты разных типов при записи/чтении важно придерживаться последовательности этапов конвертирования объектов в нужный тип. Ниже приведен пример записи и чтения кортежа, который содержит объекты целого, логического и строчного типов.
Результат выполнения программы
5. Чтение/запись словаря
Словарь также можно записывать в файл. В данном примере записывается и читается словарь, который содержит перечень номеров дней недели и их названий. Для облегчения чтения данных каждый элемент словаря размещается в отдельной строке.
Результат работы программы
Вид файла myfile6.txt
6. Чтение/запись двумерной матрицы целых чисел, представленной в виде списка
В примере демонстрируется запись и чтение двумерной матрицы целых чисел размерностью 3*4.
Результат работы программы
Вид файла myfile8.txt
7. Чтение/запись множества, которое содержит целые числа
В примере демонстрируется возможный вариант сохранения множества в текстовом файле
Результат работы программы
Вид файла myfile7.txt
8. Чтение/запись данных разных типов: список и кортеж
Чтобы записать в текстовый файл данные разных базовых типов нужно последовательно записать данные одного типа, затем другого типа. При считывании таких данных нужно придерживаться такого самого порядка чтобы не нарушить полученную структуру данных.
В примере демонстрируется последовательная запись в файл списка и кортежа. При чтении придерживается такая же последовательность: сначала читается список, затем кортеж. Список включает строки. Кортеж содержит вещественные числа. Чтобы облегчить работу по распознаванию формата файла, каждый записываемый (читаемый) элемент размещается в отдельной строке файла.
Поскольку список и кортеж могут содержать разное количество элементов, то в файл записываются их размерности.