Python не сохраняет данные в файл
Эта статья посвящена работе с файлами (вводу/выводу) в Python: открытие, чтение, запись, закрытие и другие операции.
Файлы Python
Файл — это всего лишь набор данных, сохраненный в виде последовательности битов на компьютере. Информация хранится в куче данных (структура данных) и имеет название «имя файла» (filename).
В Python существует два типа файлов:
Бинарные файлы
В бинарных файлах данные отображаются в закодированной форме (с использованием только нулей (0) и единиц (1) вместо простых символов). В большинстве случаев это просто последовательности битов.
Они хранятся в формате .bin .
Любую операцию с файлом можно разбить на три крупных этапа:
- Открытие файла
- Выполнение операции (запись, чтение)
- Закрытие файла
Заключение
В этой статье мы смотрели, как мы можем использовать Python для хранения данных по-разному.
Сохранение данных в файл-одна из самых распространенных задач программирования, с которой вы можете столкнуться в своей жизни разработчика.
Как правило, программы принимают некоторый ввод и производят некоторый вывод. Есть множество случаев, в которых мы хотели бы сохранить эти результаты. Мы можем обнаружить, что сохраняем данные в файл для последующей обработки – с веб – страниц, которые мы просматриваем, простых дампов табличных данных, которые мы используем для отчетов, машинного обучения и обучения или ведения журнала во время выполнения приложения-мы полагаемся на приложения, пишущие в файлы, а не делающие это вручную.
Python позволяет нам сохранять файлы различных типов без использования сторонних библиотек. В этой статье мы погрузимся в сохранение наиболее распространенных форматов файлов в Python.
Сохранение текстового файла
Теперь, когда мы знаем лучший способ доступа к файлу, давайте сразу приступим к записи данных.
К счастью, Python также делает это простым:
Функция write() берет строку и помещает это содержимое в поток файлов. Хотя мы не храним его, функция write() возвращает количество только что введенных символов, то есть длину входной строки.
Примечание : Обратите внимание на включение символа новой строки, \n . Он используется для записи в следующую строку файла, в противном случае весь текст будет добавлен как одна строка.
Сохранение нескольких строк одновременно
С помощью функции write() мы можем взять одну строку и поместить ее в файл. Что, если бы мы захотели написать сразу несколько строк?
Мы можем использовать функцию writelines() для помещения данных в последовательность (например, список или кортеж) и в файл:
Как и прежде, если мы хотим, чтобы данные появлялись в новых строках, мы включаем символ новой строки в конце каждой строки.
Если вы хотите пропустить шаг ручного ввода символа новой строки после каждого элемента в списке, его легко автоматизировать:
Если вам интересно узнать больше о списках и кортежах, у нас уже есть статья, посвященная им – Списки против кортежей в Python .
Переименование файлов в Python
Метод close()
После открытия файла в Python его нужно закрыть. Таким образом освобождаются ресурсы и убирается мусор. Python автоматически закрывает файл, когда объект присваивается другому файлу.
Существуют следующие способы:
Способ №1
Проще всего после открытия файла закрыть его, используя метод close() .
После закрытия этот файл нельзя будет использовать до тех пор, пока заново его не открыть.
Способ №2
Также можно написать try/finally , которое гарантирует, что если после открытия файла операции с ним приводят к исключениям, он закроется автоматически.
Без него программа завершается некорректно.
Вот как сделать это исключение:
Файл нужно открыть до инструкции try , потому что если инструкция open сама по себе вызовет ошибку, то файл не будет открываться для последующего закрытия.
Этот метод гарантирует, что если операции над файлом вызовут исключения, то он закроется до того как программа остановится.
Способ №3
Перенаправление стандартного потока ошибок
Создайте файл с именем printToStderr.py и добавьте следующий код:
Этот пример почти идентичен предыдущему, за исключением того, что вместо перенаправления стандартного выходного потока в файл мы перенаправляем его в стандартный поток ошибок. Если бы стандартный поток ошибок также был перенаправлен куда-то еще, выходные данные были бы отправлены в это место, а не на экран.
Давайте запустим этот файл:
Наш выход показал бы:
Хотя для нас это может показаться обычным выводом, для компьютера он отображается через различные конвейеры.
Текстовые файлы
Это файлы с человекочитаемым содержимым. В них хранятся последовательности символов, которые понимает человек. Блокнот и другие стандартные редакторы умеют читать и редактировать этот тип файлов.
Текст может храниться в двух форматах: ( .txt ) — простой текст и ( .rtf ) — «формат обогащенного текста».
Функция read()
Функция read() используется для чтения содержимого файла после открытия его в режиме чтения ( r ).
Синтаксис
- file = объект файла
- size = количество символов, которые нужно прочитать. Если не указать, то файл прочитается целиком.
Пример
3. Использование SQLICENCT в качестве постоянного кэша
Если вы найдете использование SQLite3 Слишком утомительно, есть гораздо лучшее решение! Вы можете использовать sqlized Для хранения постоянных данных, и это внутренне использует SQLite3 база данных для обработки хранилища.
Вы должны установить этот пакет, используя PIP:
Единственное, что вы должны иметь в виду, это то, что вам нужно использовать Ключ: значение отображения для хранения/извлечения данных, как и словарь!
Вот очень простой пример, используя MyClass пример.
Действительно, мы просто загрузили наш объект Python! Если вы заметите, sqlized создаст базу данных cache.sqlite3 автоматически, если оно не существует, а затем используйте его для хранения/загрузки данных.
Печать с помощью параметра “файл”
В предыдущих примерах мы явно перенаправили стандартный вывод на другой файлоподобный объект, изменив объект stdout . Однако для удобства мы можем сделать это непосредственно из функции print () , указав местоположение вывода с помощью параметра file :
Например, если бы мы хотели печатать непосредственно в файл , не изменяя весь сценарий stdout , мы бы написали:
Поскольку мы не возились с перенаправлением стандартного вывода явно, нам больше не нужно сбрасывать его на исходное значение. В результате это предпочтительный способ записи в файл с помощью функции print () .
Примечание: Хотя имя параметра file , помните, что он работает с любым файлоподобным объектом. Например , если вы хотите напечатать в stderr , вы должны изменить оператор print() на:
Функция readline()
Функция readline() используется для построчного чтения содержимого файла. Она используется для крупных файлов. С ее помощью можно получать доступ к любой строке в любой момент.
Пример
Создадим файл test.txt с нескольким строками:
Посмотрим, как функция readline() работает в test.txt .
Обратите внимание, как в последнем случае строки отделены друг от друга.
Функция rename()
Функция rename() используется для переименовывания файлов в Python. Для ее использования сперва нужно импортировать модуль os.
- src = файл, который нужно переименовать
- dest = новое имя файла
Пример
Открытие файла
2. Использование SQLite3 для постоянного сохранения данных в Python
Если вы хотите использовать постоянную базу данных для сохранения данных в Python, вы можете использовать SQLite3 Библиотека, которая предоставляет вам API для использования баз данных SQLite.
Опять же, это часть стандартной библиотеки, поэтому нет необходимости устанавливать ничего!
Однако, поскольку это реляционная база данных, вы не можете напрямую давить объекты Python, как в Парил Отказ
Вам придется сериализовать и десериализировать их в соответствующие типы баз данных.
Посмотрите на некоторые примеры, вы можете обратиться к этой статье на использовании SQLite в Python.
Функция write()
Функция write() используется для записи в файлы Python, открытые в режиме записи.
Если пытаться открыть файл, которого не существует, в этом режиме, тогда будет создан новый.
Синтаксис
Пример
Предположим, файла xyz.txt не существует. Он будет создан при попытке открыть его в режиме чтения.
Пример
Создадим текстовый файл example.txt и сохраним его в рабочей директории.
Следующий код используется для его открытия.
В этом примере f — переменная-указатель на файл example.txt .
Следующий код используется для вывода содержимого файла и информации о нем.
Стоит обратить внимание, что в Windows стандартной кодировкой является cp1252 , а в Linux — utf-08 .
Текущая позиция в файлах Python
В Python возможно узнать текущую позицию в файле с помощью функции tell() . Таким же образом можно изменить текущую позицию командой seek() .
Запись формы в файл CGI скриптом на Python
Доброго всем времени суток! Мне необходимо сохранить содержимое формы в файл, используя CGI скрипты.
Поиск по ключевым словам и запись данных в файл (python)
Добрый день. Я начинающий кодер на python. Мне требуется помощь. Я пишу бота для Telegram, мне.
Запись звука в WAV файл на Python. Библиотека sounddevice, playsound
Здравствуйте, программисты. Буду благодарен вашей помощи. Недавно начал изучать язык python и.
Multimap STL - работает только запись в файл, поиск в файле не работает
И снова здравствуйте. Снова я прошу вашей помощи. Переделал программу с мапом в мульти мап, но что.
Согласен с ТабуретY, но помимо(ну сколько можно уже) всего еще и КИРИЛЛИЦА в пути/имени файла.
C:\Users\днс\Desktop\rezultat_phyton.txt
НЕ ДЕЛАЙТЕ ТАК! ТОЛЬКО латиница! Смените путь(перенесите в другой каталог) к проектам python.
Ну насчет вынь10 не знаю, не советчик, а вот с вынь9*-7 сталкивался. До ХР-SP3 не работал питон НИКАК, если хоть один символ в путях был кириллическим. После сервис-пак три(именно в ХР) можно было непосредственно в "Мои документы", если это "жесткая ссылка" на "$USER\mydoc". В СЕМЕРКЕ работало с кириллицей UTF-8 ТОЛЬКО через mingw.
Так что, еще раз "да", не держите проекты в $USER, не стоит.
И да(вместо постскриптума), у меня с 2004-ого linux, так что.
Ничего подобного, серьёзные проекты не должны "ломаться" от кириллицы.
Мы на одном из прошлых проектов специально делали дефолтные имена файлов и каталогов русскими, чтобы возможные проблемы вскрывались сразу.
Добавлено через 10 минут
До ХР-SP3 не работал питон НИКАК, если хоть один символ в путях был кириллическим. После сервис-пак три(именно в ХР) можно было непосредственно в "Мои документы", если это "жесткая ссылка" на "$USER\mydoc". В СЕМЕРКЕ работало с кириллицей UTF-8 ТОЛЬКО через mingw.
Хех. Хорош девелопер, который искренне считает, что не должен уметь работать с тем, что ему не нравится, по личным идейным соображениям.
Вообще то, пытался дописать, но правила не позволили позднее пяти минут.
Так вот:
а) ничего не имею против винды(тем паче, сам ее ставлю людям(изредка))
б) под виндой была пара попыток написать на 2.7. Получил зверские тормоза. Вторая попытка под mingw - все отлично.
в) не увидел в своих комментариях "идейности" - сами ОС подразумевают первые 128 символов в путях/именах изначально.
г) какая-то версия 2.7-* умела "ходить" по жестким ссылкам NTFS с кириллицей(не помню).
д) у 3.4 был патч под винду
е) 3.6 до 3.6.4 НЕ РАСПОЗНАВАЛ кириллические имена для самописных модулей(см. багрепорт и ISSUE)
И да, я не девелопер - я на ассме(питон и хобби и жажда познания)
Добавлено через 1 минуту
Но(эммм. см. выше), ИМХО, не стоит - проще делать пути с латиницей.
Еще раз: НЕ ПЫТАЮСЬ ввязаться в холивар - мое мнение.
Вывод
В этой статье мы обсуждали перенаправление вывода функции Python print() с помощью различных методов. Эти методы включали перенаправление вывода скрипта Python из командной строки, перенаправление стандартного вывода в скриптах Python и указание файлоподобного объекта в параметре file непосредственно в функции print () .
Вступление
Функция Python print() обычно используется для отображения текста либо в командной строке, либо в интерактивном интерпретаторе, в зависимости от того, как выполняется программа Python. Однако мы можем изменить его поведение, чтобы записать текст в файл, а не в консоль.
В этой статье мы рассмотрим множество способов записи в файл с помощью функции print () .
Инструкция with
Еще один подход — использовать инструкцию with , которая упрощает обработку исключений с помощью инкапсуляции начальных операций, а также задач по закрытию и очистке.
В таком случае инструкция close не нужна, потому что with автоматически закроет файл.
Вот как это реализовать в коде.
Использование ключевого слова “with”
О закрытии файла можно легко забыть, ведь мы все-таки люди. К счастью для нас, в Python есть механизм, позволяющий использовать файл и автоматически закрывать его, когда мы закончим.
Для этого нам просто нужно использовать ключевое слово with :
Это рекомендуемый способ открытия и записи в файл, поскольку вам не нужно вручную закрывать его, чтобы освободить ресурсы, и он предлагает безотказный механизм, чтобы держать ваш ум на более важных аспектах программирования.
Метод open()
В Python есть встроенная функция open() . С ее помощью можно открыть любой файл на компьютере. Технически Python создает на его основе объект.
- file_name = имя открываемого файла
- access_mode = режим открытия файла. Он может быть: для чтения, записи и т. д. По умолчанию используется режим чтения ( r ), если другое не указано. Далее полный список режимов открытия файла
Как сохранить данные в Python?
Когда мы работаем над приложениями Python, мы будем иметь дело с объектами Python напрямую, так как все является объектом в Python. Давайте посмотрим на некоторые способы, которыми мы можем легко хранить их!
Об авторе
Эта статья была написана Джейкобом Стопаком, разработчиком программного обеспечения и консультантом, страстно желавшим помочь другим улучшить свою жизнь с помощью кода. Джейкоб является автором руководства Coding Essentials Guidebook for Developers , вводной книги, которая охватывает основные концепции и инструменты кодирования. Он содержит главы по базовой компьютерной архитектуре, Интернету, командной строке, HTML, CSS, JavaScript, Python, Java, базам данных/SQL, Git и многим другим.
Чтение и запись файлов в Python
В Python файлы можно читать или записывать информацию в них с помощью соответствующих режимов.
Сохранение файла JSON
JSON-это еще один популярный формат для хранения данных, и, как и в случае с Csv, Python очень просто записывает данные вашего словаря в файлы JSON:
Нам действительно нужно импортировать библиотеку json и открыть файл. Чтобы на самом деле записать данные в файл, мы просто вызываем функцию dump () , давая ей наш словарь данных и объект file.
Если вы хотите узнать больше об использовании файлов JSON в Python, вы можете узнать больше из этой статьи: Чтение и запись JSON в файл в Python .
Открытие и закрытие файла
Открытие файла
К содержимому файла можно получить доступ, когда он открыт, и он больше не доступен для чтения и записи после его закрытия.
Открыть файл в Python очень просто:
При открытии файла вам понадобится имя файла – строка, которая может быть относительным или абсолютным путем. Второй аргумент-это режим, который определяет действия, которые вы можете сделать с открытым файлом.
Вот некоторые из наиболее часто используемых:
- r – (режим по умолчанию) откройте файл для чтения
- w – открыть файл для записи, перезаписав содержимое, если файл уже существует с данными
- x – создает новый файл с ошибкой, если он существует
- a – открыть файл для записи, добавив новые данные в конце содержимого файла, если он уже существует
- b – запись двоичных данных в файлы вместо текстовых данных по умолчанию
- + – разрешить чтение и запись в режим
Допустим, вы хотите записать файл, а затем прочитать его после этого, ваш режим должен быть ” w+”. Если вы хотите писать, а затем читать из файла, не удаляя предыдущее содержимое, то вы будете использовать ” а+”.
Закрытие файла
Закрыть файл в Python еще проще:
Вам просто нужно вызвать метод close для объекта file. Очень важно закрыть файл после того, как вы закончите его использовать, и для этого есть много веских причин:
- Открытые файлы занимают место в оперативной памяти
- Более низкая вероятность повреждения данных, поскольку они больше не доступны
- Существует ограничение на количество файлов, которые может открыть ваша ОС
Для небольших скриптов это не является насущной проблемой, и некоторые реализации Python фактически автоматически закрывают файлы для вас, но для больших программ не оставляйте закрытие файлов на волю случая и убедитесь, что вы освободили использованные ресурсы.
Закрытие файла
Перенаправление стандартного выходного потока
В Python функция print() более гибкая, чем вы думаете. Он не был жестко закодирован таким образом, что указанный текст может быть записан только на дисплей. Вместо этого он отправляет текст в место, называемое стандартный выходной поток , также известный как stdout .
Все системы UNIX имеют три основных канала – стандартный входной канал ( stdin ), стандартный выходной канал ( stdout ) и стандартный канал ошибок ( stderr ).
По умолчанию стандартный выходной канал указывает на интерактивное окно, используемое для выполнения программы, поэтому мы обычно видим текст, распечатанный на экране. Однако для удобства стандартный вывод может быть перенаправлен в другие места, например в файлы.
Если стандартный вывод перенаправляется в определенный файл, то текст, указанный в функции print () , будет записан в этот файл вместо отображения на экране.
В Python ссылка на стандартный вывод может быть получена с помощью объекта stdout модуля sys . Это файлоподобный объект , то есть у него есть методы, которые позволяют Python читать и писать из него, как из реального файла.
Давайте посмотрим пример, где мы меняем stdout на файл:
Функция print() принимает предоставленный строковый аргумент, добавляет символ новой строки в конец и вызывает stdout.write() метод для записи его в стандартный вывод.
В приведенном выше примере мы сначала печатаем строку текста, как мы привыкли, которая будет отображаться в консоли при запуске файла. Затем мы переназначили stdout нашему пользовательскому файловому объекту – f . Поскольку файловый объект имеет вполне допустимый метод write () , наше печатное значение записывается в файл без проблем.
Обратите внимание, что рекомендуется хранить исходное значение стандартного вывода в переменной перед ее изменением. Таким образом, мы можем сбросить стандартный вывод на исходное значение после того, как закончим, что поможет избежать путаницы.
Давайте сохраним код в новый файл, printToFile.py . А потом давайте его выполним:
Мы увидим следующий вывод в терминале:
И скрипт создаст новый файл с именем filename.txt со следующим содержанием:
Вы успешно перенаправили данные из стандартного выходного потока в файл. Давайте посмотрим, как мы можем сделать это с другим популярным файлоподобным объектом, который посвящен ошибкам программирования.
1. Использование сочинения для хранения объектов Python
Если мы хотим держать вещи простыми, мы можем использовать модуль сортировки, который является частью стандартной библиотеки для сохранения данных в Python.
Мы можем «сортировать» объекты Python в пиловый файл, который мы можем использовать для сохранения данных/загрузки данных.
Поэтому, если у вас есть пользовательский объект, который вам может потребоваться хранить/извлекать, вы можете использовать этот формат:
Если вы запускаете этот скрипт, вы заметите файл под названием data.pickle , который содержит сохраненные данные.
Чтобы снова загрузить один и тот же объект, мы могли бы использовать Pickle.Load () используя аналогичную логику.
Мы только что успешно восстановили наши старые данные!
Перенаправление вывода скрипта Python в терминале
Например, если бы у нас был файл Python с именем hello.py со следующим содержанием:
Если мы откроем наш вновь созданный output.txt , мы увидим следующее содержание:
Однако при использовании этого метода все выходные данные скрипта записываются в файл. Часто более гибко выполнять это перенаправление из самого скрипта Python.
Сохранение CSV-файла
Файлы CSV (значения, разделенные запятыми) обычно используются для хранения табличных данных. Из-за своей популярности Python имеет некоторые встроенные методы, облегчающие написание файлов такого типа:
Сначала нам нужно импортировать библиотеку csv , чтобы получить их вспомогательные функции. Мы открываем файл, как мы привыкли, но вместо того, чтобы писать содержимое на объект csv_file , мы создаем новый объект с именем csv_writer .
Этот объект предоставляет нам метод writerow () , который позволяет нам поместить все данные строки в файл за один раз.
Если вы хотите узнать больше об использовании CSV-файлов в Python более подробно, вы можете прочитать больше здесь: Чтение и запись CSV-файлов в Python .
Вывод
Сохранение файлов может пригодиться во многих программах, которые мы пишем. Чтобы написать файл на Python, нам сначала нужно открыть его и убедиться, что мы закроем его позже.
Лучше всего использовать ключевое слово with , чтобы файлы автоматически закрывались, когда мы закончим писать в них.
Мы можем использовать метод write() для помещения содержимого строки в файл или использовать writelines () , если у нас есть последовательность текста для помещения в файл.
Для данных CSV и JSON мы можем использовать специальные функции, предоставляемые Python для записи данных в файл после его открытия.
Функция печати Python обычно используется для отображения текста либо в консоли. Мы также можем использовать функцию печати для записи в файл. Эта статья покажет вам, как это сделать.
Читайте также: