Как записать массив в файл без скобок python

Обновлено: 04.07.2024

Высокоуровневый язык программирования Python 3 предоставляет своим пользователям массу полезных средств для взаимодействия с текстовыми файлами. Встроенные методы платформы позволяют не только создавать документы для хранения строковой информации, но и читать из них данные, а также записывать, удалять и всячески манипулировать их содержимым.

Создание, открытие и закрытие файла

Работа с любым текстовым файлом в Python начинается с вызова специальной функции open, которая принимает в качестве параметров путь к объекту на компьютере и режим обработки. Путь к документу можно указать как абсолютный (адрес расположения на жестком диске ПК), так и как относительный (координаты относительно папки проекта). Выбирая нужный режим обработки файла, следует учитывать его назначение (“w” для записи, “r” для чтения данных). Следующий пример показывает простое взаимодействие с текстовым документом.

Как можно заметить, функция open принимает относительный путь файла и открывает его для записи. Если в папке с исходным кодом документа с аналогичным именем и расширением .txt не существует, метод open создает его самостоятельно, после чего открывает для него нужный режим обработки. Выполнив все необходимые действия с переменной file, которая ссылается на реальный файл, следует вручную закрыть его, чтобы избежать потери информации. Данную задачу выполняет метод close, если вызвать его при помощи оператора доступа (точки).

Выполнить точно такие же действия, но без необходимости вручную закрывать файл, вполне возможно благодаря связке операторов with as. Для этого необходимо поместить метод open сразу после ключевого слова with, а переменную, которая будет ссылаться на файл, прописать за конструкцией as. Ниже располагается пример открытия документа с помощью with as.

Оба примера небольших программ демонстрируют работу с test.txt, который генерируется в каталоге с исходным кодом. В качестве режима обработки для него выбирается запись данных. После этого при помощи метода write в него заносится строка “hello world”. Завершается код в обоих случаях закрытием текстового файла test.txt методом close или автоматически.

Запись построчно

Чтобы быстро записать информацию в текстовый файл, достаточно открыть его в программе, написанной на языке Python, после чего воспользоваться функцией write через переменную, которая ссылается на документ.

Приведенный выше пример небольшой программы показывает создание небольшого массива lines, который содержит три строковых элемента: “first”, “second” и “third”. За счет функции open и связки операторов with as происходит открытие текстового файла test.txt в корневом каталоге жесткого диска D. В цикле мы проходим по всем элементам списка и с помощью команды write их записываем. Чтобы каждая запись была с новой строки, добавляем символ перевода строки.

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

Этот пример отличается от предыдущего тем, что вызывается метод writelines, который принимает в качестве аргумента генератор. Для разделения элементов последовательности тут применяется “\n”, благодаря чему каждое слово в документе будет находиться в отдельной строке.

Чтение построчно

Прочитать содержимое текстового файла построчно в языке Python очень просто, поскольку в этом прекрасно помогает цикл for. Но для начала все же необходимо открыть документ, как и в предыдущем случае, при помощи open и with as. Однако на этот раз следует указать другой режим обработки файла, выбрав для него “r” для получения доступа к чтению данных.

В этом примере показывается открытие файла test.txt, в котором уже содержится небольшой массив строк, записанный ранее. Построчное чтение информации из файла производится в цикле for. Каждая итерация выводит сведения из новой строки (line) при помощи функции print. Все элементы отображаются на экране построчно, как и были ранее помещены в test.txt.

Количество строк

Возможности языка Python позволяют производить и куда более сложные виды программных операций с внутренним содержимым текстовых файлов. Например, если требуется определить в Python количество строк в файле, можно открыть файл и в цикле посчитать количество занятых в нем строк. В этом поможет предварительно объявленная переменная count, в которую перед применением нужно записать 0, а затем прибавлять по единице с каждой новой строкой.

Приведенный выше пример демонстрирует работу счетчика count. Для взаимодействия с ним следует открыть текстовый файл в режиме чтения, а затем инкрементировать в каждом новом шаге цикла for объявленную ранее числовую переменную, которая затем выводится в print.

Можно поступить и другим способом. Прочитать файл в список с помощью readlines. А после этого с помощью функции len определить размер списка. Это и будет количество строк.

Поиск строки

Чтобы с помощью Python найти строку в текстовом файле, стоит прибегнуть к помощи встроенного метода readlines, который позволяет автоматически считывать внутреннее содержимое файла. Как и раньше, для начала необходимо открыть test.txt для чтения, чтобы затем поместить данные из него в специальный массив lines. Встроенный метод index позволяет найти номер элемента в последовательности, просто передав ему нужный объект, например, строку “second”.

Поскольку в test.txt все элементы располагаются в отдельных строках, к строке, которую стоит передать методу index в качестве аргумента, необходимо прибавить конструкцию “\n”.

Удаление строки

Чтобы в Python удалить ненужную строку из файла, следует воспользоваться сразу двумя режимами обработки файлов: чтение и запись. Для начала необходимо открыть test.txt для чтения, чтобы поместить информацию из него в отдельный массив lines. Далее потребуется удалить один из элементов последовательности при помощи оператора del, указав ему индекс нужной строки в квадратных скобках. Массив объектов, который получился в итоге, необходимо поместить в исходный текстовый файл, однако на этот раз открыть его надо в режиме записи.

Приведенный выше пример небольшой программы демонстрирует удаление строки из файла. В данном случае используются методы readlines и writelines, позволяющие считывать массив строк из документа и записывать его туда же, разделяя отдельные элементы списка.

Обратите внимание, что в приведенном примере удалится вторая строка, так как индексы списка считаются от нулевого элемента.

Таким образом, можно достаточно легко взаимодействовать с содержимым текстовых файлов, пользуясь языком программирования Python 3. Его встроенные функции позволяют записывать данные в документ и считывать их в удобном для пользователя виде. При помощи средств по расширенной работе с файлами, можно управлять ими на куда более продвинутом уровне.

В качестве сериализованных структур данных программисты на Python активно используют массивы, списки и словари. Хранение этих структур данных постоянно требует файл или базу данных для работы с ними. Эта статья рассказывает, как печатать список в файл и как считать его обратно в память.

Чтобы записать данные в файл и считать их из файла, язык программирования Python предлагает стандартные методы write() and read() для работы с одиночными строками, а также writelines() и readlines() для работы с множеством строк. Более того, модули pickle и json module предоставляют разумные способы работы с сериализованными наборами данных.

Использование методов read и write

Основные методы отлично работают с символами (строками). Построчное сохранение списка в файл listfile.txt работает следующим образом:

Использование методов writelines и readlines

Как упомянуто в начале этой статьи, Python также содержит два метода writelines() и readlines() , чтобы писать и читать множество строк за один шаг соответственно. Напечатать весь список в файл или на диск поможет следующий код на Python:

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

Открыв файл listfile.txt в строке 5, полностью переделываем список в строке 6. Сначала читаем содержимое файла через readlines() . Затем в цикле for удаляем окончание из каждой строки с помощью метода rstrip() . В конце добавляем строку к списку мест как новый элемент. По сравнению с прошлым листингом код получился более компактным, но его может быть сложнее прочесть начинающим программистам на Python.

Использование модуля pickle

Эти два примера показывают использование строк. Кстати, pickle работает со всеми видами объектов языка Python, такими как строки, числа, определённые в самом коде структуры, а также любые другие встроенные структуры данных Python.

Использование формата JSON

Используемый pickle формат двоичных данных специфичен для Python. Чтобы улучшить взаимодействие между различными программами, JavaScript Object Notation (JSON) предлагает лёгкую в использовании и читаемую для человека схему, и поэтому стал очень популярным.

Следующий пример показывает, как печатать список из элементов различных типов в выходной файл с помощью модуля json. В строке 4 определён основной список. Имея открытым файлом для записи в строке 7, метод dump() хранит основной список в файле, используя JSON.

Читать содержимое выходноо файла обратно в память так же просто, как записывать данные. Соответствующий dump() метод называется load() и работает следующим образом:

Вывод

Методы, показаные выше, разнятся от простой записи/чтенияя данных до сброса/загрузки через двоичные потоки с помощью pickle и JSON. Это значительно упрощает хранение списка и чтение его обратно в память.

Занимаясь научными вычислениями, вы получаете результаты, которые должны быть обязательно сохранены. Самый надежный способ хранения - это загрузка массивов с результатами в файл, так как их легко хранить и передавать. Для данных нужд, NumPy предоставляет очень удобные инструменты, позволяющие производить загрузку и выгрузку массивов в файлы различных форматов, а так же производить их сжатие, необходимое для больших массивов.

6.1. Двоичные файлы NumPy (.npy, .npz)

NumPy имеет два собственных формата файлов .npy - для хранения массивов без сжатия и .npz - для предварительного сжатия массивов. Если массивы, которые необходимо сохранить являются небольшими, то можно воспользоваться функцией numpy.save() . В самом простом случае, данная функция принимает всего два аргумента - имя файла в который будет сохранен массив и имя самого сохраняемого массива. Однако следует помнить, что файл будет сохранен, в той директории в которой происходит выполнение скрипта Python или в указанном месте:

После того как массив сохранен, его можно загрузить из файла с помощью функции numpy.load() , указав в виде строки имя необходимого файла, если он находится в той же директории, что и выполняемый скрипт Python, или путь к нему, если он располагается в другом месте:

Файлы .npy удобны для хранения одного массива, если в одном файле нужно сохранить несколько массивов, то необходимо воспользоваться функцией numpy.savez() , которая сохранит их в несжатом виде в файле NumPy с форматом .npz.

После сохранения массивов в файл .npz они могут быть загружены с помощью, уже знакомой нам, функции numpy.load() . Однако, имена массивов теперь изменились с a , b и c на arr_0 , arr_1 и arr_2 соответственно:

Что бы вместе с массивами сохранялись их оригинальные имена, необходимо в функции numpy.savez() указывать их как ключи словарей Python:

В случае очень больших массивов можно воспользоваться функцией numpy.savez_compressed() .

На самом деле, файлы .npz это просто zip-архив который содержит отдельные файлы .npy для каждого массива.

После того как файл был загружен с помощью функции numpy.savez_compressed() его так же легко загрузить с помощью функции numpy.load() :

6.2. Текстовые файлы (.txt)

Очень часто приходится иметь дело с данными, которые хранятся в обычных текстовых файлах (.txt). Как правило, данные представлены в виде строк, в каждой строке может быть несколько значений, разделенных некоторым символом-разделителем, как правило '' - пробелом, ',' или любым другим символом (или группой символов). Такие файлы, по своей сути, являются текстовыми представлениями таблиц, данные которых необходимо как-то загружать и выгружать.

Для работы с данными в текстовом формате NumPy предоставляет очень гибкие функции, но пока мы ограничимся рассмотрением лишь двух из них numpy.savetxt() и numpy.loadtxt() в самом простом случае их использования.

Если заглянуть в получившийся файл, то мы увидим следующее:

Как видим, одномерный массив записывается в текстовый файл простой последовательностью строк, одно значение - одна строка. Давайте сохраним двумерный массив:

Двумерный массив в получившемся текстовом файле будет выглядеть следующим образом:

Каждой строке в текстовом файле соответствует строка из загруженного массива с разделенными пробелом значениями.

Если попробовать сохранить в текстовый файл трехмерный массив или же массив с большей размерностью, то это приведет к ошибке:

C чем связано такое поведениесказать трудно и можно подумать, что это является большим минусом, однако, напомню, что работа с текстовыми файлами имеет совсем другую основную цель - большие таблицы с данными самого разного типа.

Итак, у нас есть два файла test_1.txt и test_2.txt, теперь загрузим массивы которые в них хранятся с помощью функции numpy.loadtxt() :

Как видим, все довольно просто. Но, мы не рассматривали загрузку данных из реальных таблиц, вид которых может быть очень сложным. Например, у нас есть текстовый файл loadtxt_example.txt со следующими данными:

Функция numpy.loadtxt() позволяет загрузить эти данные в так называемый структурированный массив NumPy:

Обрабатывать отсутствующие значения (строка 8 и 15):

Или выгружать только необходимые столбцы таблицы:

И это только малая часть всех возможностей, которые предоставляет NumPy для работы с данными в текстовом виде. Функция numpy.fromregex() позволяет создавать массивы из текстовых файлов с использованием регулярных выражений, а функция numpy.genfromtxt() имеет более 20 параметров настройки и предоставляет самые гибкие решения создания массивов из текстовых файлов.

6.3. Бинарные файлы

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

Рассмотрим простой пример:

Как видим, двоичный файл создан не с помощью функции NumPy, а спомощью метода базового класса ndarray объектами которого являются все массивы. Что бы загрузить массив из такого файла необходимо воспользоваться функцией numpy.fromfile() :

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

В качестве сериализованных структур данных программисты Python интенсивно используют массивы, списки и словари. Для постоянного хранения этих структур данных требуется файл или база данных для работы. В этой статье описывается, как записать список в файл и как прочитать его.

Для записи данных в файл и чтения данных из файла язык программирования Python предлагает стандартные методы write() и read() для работы с одной строкой, а также Writelines() и readlines() для работы с несколькими строк. Кроме того, как pickle, так и json-модуль также позволяют находить разумные способы работы с сериализованными наборами данных.

Использование методов

Для работы с символами (строками) отлично работают основные методы. Сохранить такой список построчно в файл listfile.txt можно следующим образом:

Имейте в виду, что вам нужно удалить перенос строки с конца строки. В этом случае нам помогает то, что Python также допускает операции со списком для строк. В строке 8 приведенного выше кода это удаление просто выполняется, как операция списка над самой строкой, которая сохраняет все, кроме последнего элемента. Этот элемент содержит символ «\n», обозначающий разрыв строки в системах UNIX и Linux.

Использование методов Writelines и Readlines

Как упоминалось в начале этой статьи, Python также содержит два метода Writelines() и readlines() для записи и чтения нескольких строк за один шаг соответственно. Чтобы записать весь список в файл на диске, код Python выглядит следующим образом:

Чтобы прочитать весь список из файла на диске, код Python выглядит следующим образом:

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

После открытия файла listfile.txt в строке 5, восстановление списка происходит полностью в строке 6. Во-первых, содержимое файла считывается с помощью readlines(). Во-вторых, в цикле for из каждой строки удаляется символ переноса строки с помощью метода rstrip(). В-третьих, строка добавляется в список мест, как новый элемент списка. По сравнению с приведенным выше листингом код намного компактнее, но может быть более трудным для чтения для начинающих программистов Python.

Использование модуля pickle

Различные методы, описанные до сих пор, хранят список таким образом, чтобы люди могли его прочитать. Если в этом нет необходимости, модуль pickle может вам пригодиться. Его метод dump() эффективно сохраняет список, как поток двоичных данных. Во-первых, в строке 7 (в приведенном ниже коде) выходной файл listfile.data открывается для двоичной записи («wb»). Во-вторых, в строке 9 список сохраняется в открытом файле с помощью метода dump():

Два примера здесь демонстрируют использование строк. Хотя, pickle работает со всеми видами объектов Python, такими как строки, числа, самоопределяемые структуры и любые другие встроенные структуры данных, которые предоставляет Python.

Использование формата JSON

Двоичный формат данных, который использует pickle, специфичен для Python. Чтобы улучшить взаимодействие между различными программами, нотация объектов JavaScript (JSON) предоставляет простую в использовании и удобочитаемую схему и, таким образом, стала очень популярной.

В следующем примере показано, как записать список смешанных типов переменных в выходной файл с помощью модуля json. В строке 4 определен базовый список. Открыв выходной файл для записи в строке 7, метод dump() сохраняет базовый список в файле, используя JSON.

Чтение содержимого выходного файла обратно в память так же просто, как запись данных. Соответствующий метод для dump() называется load() и работает следующим образом:

Заключение

Различные методы, показанные выше, варьируются от простой записи, чтения данных до сброса и загрузки данных через двоичные потоки с использованием pickle и JSON. Это упрощает постоянное хранение списка и чтение его обратно в память.

Читайте также: