Сохранение результатов расчётов.
В файле, как и в оперативной памяти, данные хранятся в виде нулей и единиц.
При записи какого-либо типа данных они превращаются в двоичный поток и записываются на диск.
При чтении с диска происходит обратный процесс. Благодаря тому, что известен тип записанных на диск данных, двоичный поток преобразуется в конкретный тип данных.
Предположим, мы прочитали с диска последовательные 32 бита (4 байта). Если файл описан как файл целого типа, то эти 4 байта будут интерпретированы как целое число.
Если файл хранит короткие строки (пример: type sh=char, то есть короткая строка — это массив символов. В короткой строке не может быть больше 255 символов),то байты будут интерпретированы как 4 символа.
То есть интерпретация содержимого, записанного на диск, зависит от описанного в программе типа файла.
Буферизация данных
Как уже говорилось ранее, когда мы выводим данные, они сначала помещаются в буфер. Очистка буфера осуществляется
- 1) Если он заполнен
- 2) Если поток закрывается
- 3) Если мы явно указываем, что необходимо очистить буфер (здесь тоже есть исключения:)).
- 4) Также очищается, если программа завершилась удачно. Вместе с этим закрываются и все файлы. В случае ошибки выполнения этого может не произойти.
Форсировать выгрузку буфера можно с помощью вызова функции fflush(File *). Рассмотрим два примера – с очисткой и без.
#include <stdio.h> #include <conio.h> #include <stdlib.h> void main() { FILE *file; char c; file = fopen("C:/c/test.txt", "w"); do { c = getch(); fprintf(file, "%c", c); fprintf(stdout, "%c", c); //fflush(file); } while(c != 'q'); fclose(file); getch(); }
Раскомментируйте вызов fflush. Во время выполнения откройте текстовый файл и посмотрите на поведение.
Буфер файла можно назначить самостоятельно, задав свой размер. Делается это при помощи функции
void setbuf (FILE * stream, char * buffer);
которая принимает уже открытый FILE и указатель на новый буфер. Размер нового буфера должен быть не меньше чем BUFSIZ (к примеру, на текущей рабочей станции BUFSIZ равен 512 байт).
Если передать в качестве буфера NULL, то поток станет небуферизированным. Можно также воспользоваться функцией
int setvbuf ( FILE * stream, char * buffer, int mode, size_t size );
которая принимает буфер произвольного размера size. Режим mode может принимать следующие значения
- _IOFBF — полная буферизация. Данные записываются в файл, когда он заполняется. На считывание, буфер считается заполненным, когда запрашивается операция ввода и буфер пуст.
- _IOLBF — линейная буферизация. Данные записываются в файл когда он заполняется, либо когда встречается символ новой строки. На считывание, буфер заполняется до символа новой строки, когда запрашивается операция ввода и буфер пуст.
- _IONBF – без буферизации. В этом случае параметры size и buffer игнорируются.
Пример: зададим свой буфер и посмотрим, как осуществляется чтение из файла. Пусть файл короткий (что-нибудь, типа Hello, World!), и считываем мы его посимвольно
#include <conio.h> #include <stdio.h> #include <stdlib.h> void main() { FILE *input = NULL; char c; char buffer = {0}; input = fopen("D:/c/text.txt", "rt"); setbuf(input, buffer); while (!feof(input)) { c = fgetc(input); printf("%c\n", c); printf("%s\n", buffer); _getch(); } fclose(input); }
Видно, что данные уже находятся в буфере. Считывание посимвольно производится уже из буфера.
Чтение и запись файлов в python
Пайтон позволяет как читать, так и записывать в файлы информацию. Для этого при открытии применяются различные режимы.
Функция read
Применяя функцию read() Вы можете прочесть информацию из файл, который был открыт в режиме чтения (r):
Копировать
- file- объект файла
- size- количество символов, которые Вы хотите получить. Когда этот параметр не указан, файл читается от начала до конца.
Вот как это выглядит:
Копировать
Копировать
Функция readline
Если файл большой и Вы прочитаете его целиком, он заполнит оперативную память и может возникнуть её дефицит. Чтобы этого избежать лучше читать файл построчно. Для этого в Python есть метод readline(), который обеспечивает доступ к любой строке файла.
Использование данного метода выглядит следующим образом:
Копировать
Циклом for:
Копировать
Копировать
Копировать
Функция write
Если Вам необходимо записать что-то в файл, надо совершить следующие шаги:
— открыть файл в режиме записи;
— использовать функцию write();
— закрыть файл.
Если файла, к которому Вы обращаетесь в этом режиме, не существует, то он будет автоматически создан.
Вот как это применять:
Копировать
Как создать файл
Всякий раз, когда вы хотите работать с файлом, первым шагом является его создание. Файл — это не что иное, как пространство в памяти, где хранятся данные.
Чтобы создать файл в программе «C», выполните следующие действия.wing используется синтаксис,
FILE *fp; fp = fopen ("file_name", "mode");
В приведенном выше синтаксисе файл представляет собой структуру данных, определенную в стандартной библиотеке.
fopen — стандартная функция, которая используется для открытия файла.
- Если файла нет в системе, то он создается и затем открывается.
- Если файл уже присутствует в системе, то он открывается напрямую с помощью этого функция.
fp — указатель файла, указывающий на тип файла.
Всякий раз, когда вы открываете или создаете файл, вам необходимо указать, что вы собираетесь с ним делать. Файл в программировании на языке C можно создать или открыть для чтения/записи. Режим используется для указания, хотите ли вы открыть файл для какой-либо из перечисленных ниже целей. Фоллоwing — это различные типы режимов программирования на языке C, которые можно использовать при работе с файлом.
Файловый режим | Описание |
---|---|
r | Откройте файл для чтения. Если файл находится в режиме чтения, данные не удаляются, если файл уже присутствует в системе. |
w | Откройте файл для записи. Если файл находится в режиме записи, то новый файл создается, если файл вообще не существует. Если файл уже присутствует в системе, все данные внутри файла обрезаются и он открывается для записи. |
a | Открыть файл в режим добавления. Если файл находится в режиме добавления, он открывается. Содержимое файла не меняется. |
r+ | открыт для чтения и записи с самого начала |
w+ | открыть для чтения и записи, перезаписать файл |
a+ | открыт для чтения и записи, добавления в файл |
В данном синтаксисе имя файла и режим указаны в виде строк, поэтому они всегда должны быть заключены внутри double цитаты.
Пример:
#include <stdio.h> int main() { FILE *fp; fp = fopen ("data.txt", "w"); }
Вывод:
Файл создается в той же папке, где вы сохранили свой код.
Вы можете указать путь, по которому хотите создать файл.
#include <stdio.h> int main() { FILE *fp; fp = fopen ("D://data.txt", "w"); }
# Режимы доступа к файлам
Access Mode — Режимы доступа определяют тип возможных операций в открытом файле. Это относится к тому, как файл будет использоваться после его открытия. Эти режимы также определяют местоположение дескриптора файла в файле. Дескриптор файла похож на курсор, который определяет, откуда данные должны быть прочитаны или записаны в файл. В питоне есть 6 режимов доступа:
-
Read Only (от англ. только чтение): открывает текстовый файл для чтения. Дескриптор располагается в начале файла. Если файл не существует, возникает ошибка ввода-вывода. Это также режим по умолчанию, в котором файл открывается.
-
Read and Write (от англ. чтение и запись): открывает файл для чтения и записи. Дескриптор располагается в начале файла. Вызывает ошибку ввода-вывода, если файл не существует.
-
Write Only (от англ. только запись): открывает файл для записи. Для существующего файла данные усекаются и перезаписываются. Дескриптор располагается в начале файла. Создает файл, если файл не существует.
-
Write and Read (от англ. запись и чтение): открывает файл для чтения и записи. Для существующего файла данные усекаются и перезаписываются. Дескриптор располагается в начале файла.
-
Append Only (от англ. только добавить): открывает файл для записи. Файл создается, если он не существует. Дескриптор располагается в конце файла. Записываемые данные будут вставлены в конце, после существующих данных.
-
Append and Read (от англ. добавить и прочитать): открывает файл для чтения и записи. Файл создается, если он не существует. Дескриптор располагается в конце файла. Записываемые данные будут вставлены в конце, после существующих данных.
Функции, применяемые для осуществления файловых операций
Функция | Краткое описание |
---|---|
FileClose | Закрытие файла, ранее открытого функцией FileOpen(). |
FileDelete | Удаление указанного файла. Файлы могут быть удалены только в том случае, если они расположены в папке каталог_терминала\experts\files (каталог_терминала\tester\files в случае тестирования эксперта) или ее подпапках. |
FileFlush | Сброс на диск всех данных, оставшихся в файловом буфере ввода-вывода. |
FileIsEnding | Возвращает TRUE, если файловый указатель находится в конце файла, иначе возвращает FALSE. В случае достижения конца файла в процессе чтения функция GetLastError() вернет ошибку ERR_END_OF_FILE (4099) |
FileIsLineEnding | Возвращает TRUE, если файловый указатель находится в конце строки файла формата CSV, иначе возвращает FALSE. |
FileOpen | Открывает Файл для ввода и/или вывода. Возвращает файловый описатель открытого файла или -1 в случае неудачи. |
FileOpenHistory | Открывает файл в текущей папке истории (каталог_терминала\history\server_name) или ее подпапках. Возвращает описатель файла или -1 в случае неудачи. |
FileReadArray | Функция читает указанное число элементов из двоичного файла в массив. Перед чтением данных массив должен быть достаточного размера. Функция возвращает количество фактически прочитанных элементов. |
FileReadDouble | Функция читает число двойной точности с плавающей точкой (double) из текущей позиции бинарного файла. Размер числа может быть 8 байтов (double) или 4 байта (float). |
FileReadInteger | Функция читает целое число из текущей позиции бинарного файла. Размер целого числа может быть 1, 2 или 4 байта. Если размер числа не указан, система пытается прочитать как 4-байтовое целое число. |
FileReadNumber | Чтение числа с текущей позиции файла CSV до разделителя. Применяется только для файлов CSV. |
FileReadString | Функция читает строку с текущей позиции файла. Применяется как к CSV, так и к двоичным файлам. Для текстовых файлов строка будет прочитана до разделителя. Для бинарных файлов в строку будет прочитано указанное количество символов. |
FileSeek | Функция перемещает файловый указатель на новую позицию, которая является смещением в байтах от начала, конца или текущей позиции файла. Следующее чтение или запись происходят с новой позиции. Если перемещение файлового указателя прошло успешно, функция возвращает TRUE, иначе возвращает FALSE. |
FileSize | Функция возвращает размер файла в байтах. |
FileTell | Функция возвращает смещение текущей позицию файлового указателя от начала файла. |
FileWrite | Функция предназначена для записи данных в файл CSV, разделитель между данными включается автоматически. После записи в файл добавляется признак конца строки «\r\n». При выводе числовые данные преобразуются в текстовый формат. Возвращает количество записанных символов или отрицательное значение, если происходит ошибка. |
FileWriteArray | Функция записывает массив в бинарный файл. |
FileWriteDouble | Функция записывает число с плавающей запятой в двоичный файл. |
FileWriteInteger | Функция записывает значение целого числа в двоичный файл. |
FileWriteString | Функция записывает строку в двоичный файл с текущей позиции. Возвращает число фактически записанных байтов или отрицательное значение в случае ошибки. |
Для получения подробного описания этих и других функций необходимо обратиться к
справочной документации на MQL4.community, сайте MetaQuotes Ltd. или к разделу «Справка» в редакторе MetaEditor.
Дата и времяМассивы и таймсерии
Читаем текстовые файлы в Python 3
Поскольку наш текстовый файл открыт, мы можем манипулировать им (т.е. читать из него) через переменную, которой он был присвоен. Python предоставляет три связанные операции для чтения информации из файла. Давайте немного разберемся, как работает каждая из них.
Использование read
Функция возвращает все содержимое файла в виде одной строки. Например:
days_file.read()
Результат будет следующим:
Примечание: – это символ новой строки. При непосредственном взаимодействии с Python (например, при простом запуске python из командной строки), он будет использовать для отображения новой строки. Вы также можете использовать его для обозначения новой строки при создании собственных строк.
Использование readline
Функция возвращает следующую строку файла до очередного символа новой строки включительно. Проще говоря, эта операция читает файл построчно.
days_file.readline()
Результат будет следующим:
Как только вы прочитаете строку с помощью операции , текущая точка, с которой должно происходить чтение файла, переместится на следующую строку. Если снова вызвать эту фукнцю, она вернет следующую строку в файле:
days_file.readline()
Вывод:
Использование readlines
И, наконец, возвращает список строк в файле, где каждый элемент списка представляет собой одну строку.
days_file.readlines()
Вывод:
При чтении из файлов следует помнить, что после того, как файл был прочитан с помощью одной из операций чтения, он не может быть прочитан снова. Например, если сначала выполнить , а затем , то вторая операция вернет пустую строку. Поэтому, если вы захотите прочитать из файла, вам придется сначала открыть новую файловую переменную или использовать метод , что выходит за рамки данного руководства. Если вы хотите узнать больше, в Python есть отличная по этим методам.
Теперь, когда мы научились читать из файла, давайте узнаем, как записывать в новый файл.
Открытие и закрытие текстового файла
В Python функция используется для открытия файлов. Она предоставляет множество параметров, позволяющих указать различные режимы открытия файла, такие как чтение, запись, добавление и другие.
Параметры:
- file: Имя файла или путь к файлу, который вы хотите открыть.
-
mode: Режим открытия файла. Он определяет, как файл будет использоваться. Некоторые распространенные режимы включают:
- : Чтение (по умолчанию).
- : Запись (существующий файл будет обрезан, если он существует).
- : Добавление (добавление данных в конец файла).
- : Бинарный режим (для работы с бинарными файлами).
- : Создание (ошибка, если файл уже существует).
- buffering: Определяет размер буфера для чтения или записи. Если , буферизация отключена, если , используется буферизация по строкам, если , используется буферизация с указанным размером.
- encoding: Определяет кодировку файла, которая используется при чтении и записи текстовых файлов. Например, .
- errors: Параметр, определяющий, как обрабатывать ошибки при кодировании/декодировании. Например, , .
- newline: Параметр для определения символа новой строки ( в UNIX-подобных системах, в Windows).
- closefd: Закрывать или нет файловый дескриптор после закрытия файла.
- opener: Пользовательский объект, используемый для открытия файла. Обычно не используется.
Примеры:
Бинарный режим:
Важно:
- Используйте контекстный менеджер () для автоматического закрытия файла после завершения блока кода.
- Убедитесь, что указываете правильный путь или имя файла.
- Различайте режимы открытия файлов (чтение, запись, добавление), чтобы избежать нежелательных изменений в файле.
Закрытие файла
Если не используется контекстный менеджер, файл следует закрыть явно с помощью метода
Закрытие файла важно, так как это освобождает ресурсы, связанные с файлом, и предотвращает потенциальные проблемы, такие как утечка памяти или невозможность другим программам получить доступ к файлу из-за блокировки
Использование контекстного менеджера:
Использование контекстного менеджера (конструкция ) гарантирует, что файл будет закрыт независимо от того, произошло исключение или нет. Это обеспечивает более безопасное и удобное управление файловыми ресурсами.
Режимы открытия файла
Режимы открытия файла в Python определяют, как файл будет использоваться в процессе работы программы. Три основных режима открытия файла — ‘r’ (чтение), ‘w’ (запись) и ‘a’ (добавление).
1. Режим чтения (‘r’):
- Обозначение:
- Описание: Этот режим предназначен для чтения данных из файла.
- Поведение:
- Если файл не существует, вызывается ошибка.
- Если файл существует, программа может читать его содержимое.
-
Пример использования:
2. Режим записи (‘w’):
- Обозначение:
- Описание: Этот режим предназначен для записи данных в файл.
- Поведение:
- Если файл существует, его содержимое будет обрезано (перезаписано).
- Если файл не существует, создается новый файл.
-
Пример использования:
3. Режим добавления (‘a’):
- Обозначение:
- Описание: Этот режим также предназначен для записи данных в файл, но добавляет их в конец файла, не обрезая существующее содержимое.
- Поведение:
- Если файл существует, программа добавит данные в конец файла.
- Если файл не существует, создается новый файл.
-
Пример использования:
Режим ‘w’:
При использовании режима ‘w’, если файл уже существует, его содержимое будет полностью перезаписано.
Если файл не существует, он будет создан.
Важно использовать этот режим осторожно, чтобы не потерять существующие данные в файле.
Режим ‘a’:
При использовании режима ‘a’, данные добавляются в конец файла, не затрагивая существующее содержимое.
Если файл не существует, он будет создан.
Этот режим часто используется для добавления информации к существующему файлу, сохраняя при этом его предыдущее содержимое.
Корректировка и дозапись информации в текстовый файл.
Кроме процедур read и write при работе с текстовыми файлами используются их разновидности readln и writeln. Отличие заключается в том, что процедура writeln после записи заданного списка записывает в файл специальный маркер конца строки. Этот признак воспринимается как переход к новой строке. Процедура readln после считывания заданного списка ищет в файле следующий признак конца строки и подготавливается к чтению с начала следующей строки
Открытие текстового файла для добавления в конец информации:
Append (f);
Алгоритм корректировки строки (слова или символа) в текстовом файле:
1.Считываем всю информацию из файла и помещаем в массив строк 2. В массиве ищем и редактируем то, что нам нужно с помощью всех возможных процедур и функций работы со строками.
3.Построчно помещаем массив в файл.
28.Описание и вызов процедур в Паскале.
Использование подпрограмм является главной особенностью структурного программирования. По сути, подпрограмма представляет собой составной оператор, объединяющий ряд простых операторов. При этом этот «составной оператор» оснащается именем и внешне оформляется как программа. В подпрограмме бывают свои константы, переменные и другие атрибуты полноценной программы. Локальные переменные никак не связаны с одноименными глобальными переменными (относящимися к основной программе).
Зачем нужны подпрограммы? Их использование удобно, когда в программе несколько раз решается одна и та же подзадача, но для разных наборов данных. Кроме того, использование подпрограмм естественно для человека, которому проще воспринимать логически связанные объекты, чем множество разнородных данных.
Программный код подпрограммы описывается единожды перед телом основной программы, затем из основной программы можно им пользоваться многократно. Обращение к этому программному коду из тела основной программы осуществляется по его имени (имени подпрограммы).
В большинстве языков структурного программирования подпрограммы существуют только в виде функций. В Паскале же их два типа: процедурыифункции. Их заголовки выглядят соответственно так:
procedure имя (параметры);
function имя (параметры): тип результата;
Между функциями и процедурами есть существенное отличие. Значение, полученное в результате выполнения кода функции, жестко соотносится с ее именем путем присвоения этому имени конкретного значения. Тип, который может принять вычисляемое значение, указывается в заголовке функции (тип результата). И в теле основной программы функция вызывается только в том случае, если ее имя фигурирует в каком-либо выражении. В то время как процедура вызывается отдельно.
Параметры не являяются обязательным компонентом (Randomize,ProcedureMenu), однако их использование повышает гибкость процедуры или функции, т.к. они перестают быть привязанными к определенным данным.
Когда процедура или функция вызываются, то в скобках вместо формальных параметров, указываются фактические параметры (аргументы). Это могут быть либо конкретные значения, либо переменные из основной программы.
Формальные и фактические параметры не обязательно должны быть одинаково обозначены.
Параметры процедур могут быть следущих видов: параметры-значения, параметры-переменные, параметры – константы, бестиповые параметры, параметры-процедуры, параметры-функции.
Procedure pr (x1, x2:t1; var x3:t2;const mas:t_mas; var y; procedure g; function f:t4);
Тело подпрограммы, как и любого составного оператора на языке Паскаль, ограничивается скобками beginиend.
Примеры чтения и записи в файл
Пример 1
Открытие (или создание, если он не существует) текстового файла для чтения и записи и запись в него одной строки, состоящей из двух текстовых и одного числового значений. Файл с именем myFile1.txt будет создан в той же папке, где расположен файл Excel с кодом VBA.
1 |
SubTest1() Dimff AsInteger ‘Получаем свободный номер для открываемого файла ff=FreeFile ‘Открываем (или создаем) файл для чтения и записи Open ThisWorkbook.Path&»\myFile1.txt»ForOutput Asff ‘Записываем в файл одну строку Write#ff,»Дает корова молоко!»,_ «Куда идет король?»,25.35847 ‘Закрываем файл Close ff ‘Открываем файл для просмотра ThisWorkbook.FollowHyperlink(ThisWorkbook.Path&»\myFile1.txt») EndSub |
Строки и число можно предварительно присвоить переменным, объявленным с соответствующими типами данных, и использовать их для записи данных в файл (в строках кода с оператором Write #, как в этом и следующем примерах).
Пример 2
Открытие (или создание, если он не существует) файла без расширения для чтения и записи и запись в него трех строк: двух текстовых и одной в числовом формате. Файл с именем myFile2 будет создан в той же папке, где расположен файл Excel с кодом VBA.
Так как у файла нет расширения, Windows выведет диалоговое окно для выбора открывающей его программы. Выберите любой текстовый редактор или интернет-браузер.
1 |
SubTest2() Dimff AsInteger ‘Получаем свободный номер для открываемого файла ff=FreeFile ‘Открываем (или создаем) файл для чтения и записи Open ThisWorkbook.Path&»\myFile2″ForOutput Asff ‘Записываем в файл три строки Write#ff,»Дает корова молоко!» Write#ff,»Куда идет король?» Write#ff,25.35847 ‘Закрываем файл Close ff ‘Открываем файл для просмотра ThisWorkbook.FollowHyperlink(ThisWorkbook.Path&»\myFile2″) EndSub |
Пример 3
Считываем строку, разделенную на отдельные элементы, из файла myFile1.txt и записываем в три переменные, по типу данных соответствующие элементам.
1 |
SubTest3() Dimff AsInteger,str1 AsString,_ str2 AsString,num1 AsSingle ‘Получаем свободный номер для открываемого файла ff=FreeFile ‘Открываем файл myFile1.txt для чтения Open ThisWorkbook.Path&»\myFile1.txt»ForInput Asff ‘Считываем строку из файла и записываем в переменные Input#ff,str1,str2,num1 Close ff ‘Смотрим, что записалось в переменные MsgBox»str1 = «&str1&vbNewLine_ &»str2 = «&str2&vbNewLine_ &»num1 = «&num1 EndSub |
Попробуйте заменить в этом примере строку сначала на строку , затем на строку , чтобы наглядно увидеть разницу между операторами Input # и Line Input #.
В следующих примерах (4 и 5) замена оператора Input # на Line Input # не приведет ни к каким изменениям, так как данные в строках файла myFile2 не разделены на элементы (поля).
Пример 4
Считываем поочередно три строки из файла myFile2 и записываем в три элемента массива, объявленного как Variant, так как в этот файл ранее были записаны две строки с текстом и одна с числом.
1 |
SubTest4() Dimff AsInteger,a(2)AsVariant,iAsByte ‘Получаем свободный номер для открываемого файла ff=FreeFile ‘Открываем файл myFile2 для чтения Open ThisWorkbook.Path&»\myFile2″ForInput Asff ‘Считываем строки из файла и записываем в элементы массива Fori=To2 Input#ff,a(i) Next Close ff ‘Смотрим, что записалось в элементы массива MsgBox»a(0) = «&a()&vbNewLine_ &»a(1) = «&a(1)&vbNewLine_ &»a(2) = «&a(2) EndSub |
Пример 5
Считываем с помощью цикла Do While… Loop все строки из файла myFile2 и записываем построчно в переменную, объявленную как String (число из третьей строки запишется как текст). Для остановки цикла при достижении конца файла используем функцию EOF.
1 |
SubTest5() Dimff AsInteger,aAsVariant,bAsString ‘Получаем свободный номер для открываемого файла ff=FreeFile ‘Открываем файл myFile2 для чтения Open ThisWorkbook.Path&»\myFile2″ForInput Asff ‘Считываем строки из файла и записываем в элементы массива DoWhileNotEOF(ff) Input#ff,a b=b&a&vbNewLine Loop Close ff ‘Смотрим, что записалось в переменную MsgBoxb EndSub |
Смотрите, как создавать и открывать текстовые файлы с помощью методов CreateTextFile и OpenTextFile. Чтение файла, запись и добавление информации с помощью объекта TextStream.
Справочная информация
Python очень гибок и может легко работать с различными форматами файлов, включая, но не ограничиваясь следующими:
Тип файла | Описание |
---|---|
Обычный текст | Обычные текстовые файлы хранят данные, которые представляют собой только символы (или строки) и исключают любые структурированные метаданные |
CSV | В CSV-файлах значения разделяются запятыми (или другими разделителями) для структурирования хранимых данных, позволяя сохранять данные в формате таблицы |
HTML | Файлы на языке гипертекстовой разметки хранят структурированные данные, предназначенные для отображения браузером, и обычно используются на сайтах |
JSON | JavaScript Object Notation — это простой и эффективный формат, что делает его одним из наиболее часто используемых форматов для хранения и передачи структурированных данных |
Этот материал будет посвящен работе с обычными текстовыми файлами.
Примечание редакции: о работе с CSV-файлами читайте в статье “Как прочитать CSV-файл в Python”.