Каталог расширений

Популярные теги

3gp       avi       fb2       jpg       mp3       pdf      

Python как записать в файл


Файлы. Работа с файлами. | Python 3 для начинающих и чайников

В данной статье мы рассмотрим встроенные средства python для работы с файлами: открытие / закрытие, чтение и запись.

Итак, начнем. Прежде, чем работать с файлом, его надо открыть. С этим замечательно справится встроенная функция open:

f = open('text.txt', 'r')

У функции open много параметров, они указаны в статье "Встроенные функции", нам пока важны 3 аргумента: первый, это имя файла. Путь к файлу может быть относительным или абсолютным. Второй аргумент, это режим, в котором мы будем открывать файл.

РежимОбозначение
'r'открытие на чтение (является значением по умолчанию).
'w'открытие на запись, содержимое файла удаляется, если файла не существует, создается новый.
'x'открытие на запись, если файла не существует, иначе исключение.
'a'открытие на дозапись, информация добавляется в конец файла.
'b'открытие в двоичном режиме.
't'открытие в текстовом режиме (является значением по умолчанию).
'+'открытие на чтение и запись

Режимы могут быть объединены, то есть, к примеру, 'rb' - чтение в двоичном режиме. По умолчанию режим равен 'rt'.

И последний аргумент, encoding, нужен только в текстовом режиме чтения файла. Этот аргумент задает кодировку.

Чтение из файла

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

Первый - метод read, читающий весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n).

 >>> f = open('text.txt') >>> f.read(1) 'H' >>> f.read() 'ello world!\nThe end.\n\n'

Ещё один способ сделать это - прочитать файл построчно, воспользовавшись циклом for:

 >>> f = open('text.txt') >>> for line in f: ... line ... 'Hello world!\n' '\n' 'The end.\n' '\n'

Запись в файл

Теперь рассмотрим запись в файл. Попробуем записать в файл вот такой вот список:

 >>> l = [str(i)+str(i-1) for i in range(20)] >>> l ['0-1', '10', '21', '32', '43', '54', '65', '76', '87', '98', '109', '1110', '1211', '1312', '1413', '1514', '1615', '1716', '1817', '1918']

Откроем файл на запись:

 >>> f = open('text.txt', 'w')

Запись в файл осуществляется с помощью метода write:

 >>> for index in l: ... f.write(index + '\n') ... 4 3 3 3 3

Для тех, кто не понял, что это за цифры, поясню: метод write возвращает число записанных символов.

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

 >>> f.close()

Теперь попробуем воссоздать этот список из получившегося файла. Откроем файл на чтение (надеюсь, вы поняли, как это сделать?), и прочитаем строки.

 >>> f = open('text.txt', 'r') >>> l = [line.strip() for line in f] >>> l ['0-1', '10', '21', '32', '43', '54', '65', '76', '87', '98', '109', '1110', '1211', '1312', '1413', '1514', '1615', '1716', '1817', '1918'] >>> f.close()

Мы получили тот же список, что и был. В более сложных случаях (словарях, вложенных кортежей и т. д.) алгоритм записи придумать сложнее. Но это и не нужно. В python уже давно придумали средства, такие как pickle или json, позволяющие сохранять в файле сложные структуры.

Работа с файлами в python. Чтение и запись в файл ~ PythonRu

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

Файлы Python

Файл — это всего лишь набор данных, сохраненный в виде последовательности битов на компьютере. Информация хранится в куче данных (структура данных) и имеет название «имя файла» (filename).

В Python существует два типа файлов:

  1. Текстовые
  2. Бинарные

Текстовые файлы

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

Текст может храниться в двух форматах: (.txt) — простой текст и (.rtf) — «формат обогащенного текста».

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

В бинарных файлах данные отображаются в закодированной форме (с использованием только нулей (0) и единиц (1) вместо простых символов). В большинстве случаев это просто последовательности битов.

Они хранятся в формате .bin.

Любую операцию с файлом можно разбить на три крупных этапа:

  1. Открытие файла
  2. Выполнение операции (запись, чтение)
  3. Закрытие файла

Открытие файла

Метод open()

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

Синтаксис следующий:

f = open(file_name, access_mode)
 

Где,

  • file_name = имя открываемого файла
  • access_mode = режим открытия файла. Он может быть: для чтения, записи и т. д. По умолчанию используется режим чтения (r), если другое не указано. Далее полный список режимов открытия файла
Режим Описание
r Только для чтения.
w Только для записи. Создаст новый файл, если не найдет с указанным именем.
rb Только для чтения (бинарный).
wb Только для записи (бинарный). Создаст новый файл, если не найдет с указанным именем.
r+ Для чтения и записи.
rb+ Для чтения и записи (бинарный).
w+ Для чтения и записи. Создаст новый файл для записи, если не найдет с указанным именем.
wb+ Для чтения и записи (бинарный). Создаст новый файл для записи, если не найдет с указанным именем.
a Откроет для добавления нового содержимого. Создаст новый файл для записи, если не найдет с указанным именем.
a+ Откроет для добавления нового содержимого. Создаст новый файл для чтения записи, если не найдет с указанным именем.
ab Откроет для добавления нового содержимого (бинарный). Создаст новый файл для записи, если не найдет с указанным именем.
ab+ Откроет для добавления нового содержимого (бинарный). Создаст новый файл для чтения записи, если не найдет с указанным именем.

Пример

Создадим текстовый файл example.txt и сохраним его в рабочей директории.

Следующий код используется для его открытия.

f = open('example.txt','r') 
 fp = open('C:/xyz.txt','r') 
 

В этом примере f — переменная-указатель на файл example.txt.

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

>>> print(*f) 
 This is a text file.
 >>> print(f) 
 <_io.TextIOWrapper name='example.txt' mode='r' encoding='cp1252'>
 

Стоит обратить внимание, что в Windows стандартной кодировкой является cp1252, а в Linux — utf-08.

Закрытие файла

Метод close()

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

Существуют следующие способы:

Способ №1

Проще всего после открытия файла закрыть его, используя метод close().

f = open('example.txt','r')
 
 f.close()
 

После закрытия этот файл нельзя будет использовать до тех пор, пока заново его не открыть.

Способ №2

Также можно написать try/finally, которое гарантирует, что если после открытия файла операции с ним приводят к исключениям, он закроется автоматически.

Без него программа завершается некорректно.

Вот как сделать это исключение:

f = open('example.txt','r')
 try:
 
 finally:
 f.close()
 

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

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

Способ №3

Инструкция with

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

В таком случае инструкция close не нужна, потому что with автоматически закроет файл.

Вот как это реализовать в коде.

with open('example.txt') as f:
 
 

Чтение и запись файлов в Python

В Python файлы можно читать или записывать информацию в них с помощью соответствующих режимов.

Функция read()

Функция read() используется для чтения содержимого файла после открытия его в режиме чтения (r).

Синтаксис

file.read(size)
 

Где,

  • file = объект файла
  • size = количество символов, которые нужно прочитать. Если не указать, то файл прочитается целиком.

Пример

>>> f = open('example.txt','r')
 >>> f.read(7) 
 'This is '
 

Интерпретатор прочитал 7 символов файла и если снова использовать функцию read(), то чтение начнется с 8-го символа.

>>> f.read(7) 
 ' a text'
 

Функция readline()

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

Пример

Создадим файл test.txt с нескольким строками:

This is line1.
 This is line2.
 This is line3.
 

Посмотрим, как функция readline() работает в test.txt.

>>> x = open('test.txt','r')
 >>> x.readline() 
 This is line1.
 >>> x.readline(2) 
 This is line2.
 >>> x.readlines() 
 ['This is line1.','This is line2.','This is line3.']
 

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

Функция write()

Функция write() используется для записи в файлы Python, открытые в режиме записи.

Если пытаться открыть файл, которого не существует, в этом режиме, тогда будет создан новый.

Синтаксис

file.write(string)
 

Пример

Предположим, файла xyz.txt не существует. Он будет создан при попытке открыть его в режиме чтения.

>>> f = open('xyz.txt','w') 
 >>> f.write('Hello \n World') 
 Hello
 World
 >>> f.close() 
 

Переименование файлов в Python

Функция rename()

Функция rename() используется для переименовывания файлов в Python. Для ее использования сперва нужно импортировать модуль os.

Синтаксис следующий.

import os
 os.rename(src,dest)
 

Где,

  • src = файл, который нужно переименовать
  • dest = новое имя файла

Пример

>>> import os
 >>> 
 >>> os.rename("xyz.txt","abc.txt")
 

Текущая позиция в файлах Python

В Python возможно узнать текущую позицию в файле с помощью функции tell(). Таким же образом можно изменить текущую позицию командой seek().

Пример

>>> f = open('example.txt') 
 >>> f.read(4) 
 This
 >>> f.tell() 
 4
 >>> f.seek(0,0) 
 

Методы файла в Python

file.close() закрывает открытый файл
file.fileno() возвращает целочисленный дескриптор файла
file.flush() очищает внутренний буфер
file.isatty() возвращает True, если файл привязан к терминалу
file.next() возвращает следующую строку файла
file.read(n) чтение первых n символов файла
file.readline() читает одну строчку строки или файла
file.readlines() читает и возвращает список всех строк в файле
file.seek(offset[,whene]) устанавливает текущую позицию в файле
file.seekable() проверяет, поддерживает ли файл случайный доступ. Возвращает True, если да
file.tell() возвращает текущую позицию в файле
file.truncate(n) уменьшает размер файл. Если n указала, то файл обрезается до n байт, если нет — до текущей позиции
file.write(str) добавляет строку str в файл
file.writelines(sequence) добавляет последовательность строк в файл

запись в файл построчно и чтение — Работа с текстовыми файлами

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

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

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

file = open("test.txt", "w")
 file.write("hello world")
 file.close()

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

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

with open("test.txt", "w") as file:
 file.write("hello world")

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

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

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

В Python запись в файл построчно осуществляется с помощью записи нужной строки с последующей записью символа перевода строки ‘\n’. Рассмотрим пример записи списка поэлементно. Каждый элемент будет записан в новой строке:

lines = ["first", "second", "third"]
 with open(r"D:\test.txt", "w") as file:
 for line in lines:
 file.write(line + '\n')

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

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

lines = ["first", "second", "third"]
 with open(r"D:\test.txt", "w") as file:
 file.writelines("%s\n" % line for line in lines)

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

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

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

with open(r"D:\test.txt", "r") as file:
 for line in file:
 print(line)

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

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

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

count = 0
 with open(r"D:\test.txt", "r") as file:
 for line in file:
 count += 1
 print(count)

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

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

with open(r"D:\test.txt", "r") as file:
 print(len(file.readlines()))

Поиск строки

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

with open(r"D:\test.txt", "r") as file:
 lines = file.readlines()
 print(lines.index("second\n"))

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

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

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

with open(r"D:\test.txt", "r") as file:
 lines = file.readlines()
 del lines[1]
 with open(r"D:\test.txt", "w") as file:
 file.writelines(lines)

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

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

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

Python 3: файлы - чтение и запись: open, read, write, seek, readline, dump, load, pickle

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

open(file [, mode=’r’, encoding=None, …])

через которую и осуществляется работа с файлами. Здесь

  • file – это путь к файлу вместе с его именем;
  • mode – режим доступа к файлу;
  • encoding – кодировка файла.

Для начала определимся с понятием «путь к файлу». Представим, что наш файл ex1.py находится в каталоге app:

Тогда, чтобы обратиться к файлу my_file.txt путь можно записать так:

"my_file.txt"

или

"d:\\app\\my_file.txt"

или так:

"d:/app/my_file.txt"

Последние два варианта представляют собой абсолютный путь к файлу, то есть, полный путь, начиная с указания диска. Причем, обычно используют обратный слеш в качестве разделителя: так короче писать и такой путь будет корректно восприниматься как под ОС Windows, так и Linux. Первый же вариант – это относительный путь, относительно рабочего каталога.

Теперь, предположим, мы хотим обратиться к файлу img.txt. Это можно сделать так:

"images/img.txt"

или так:

"d:/app/images/img.txt"

Для доступа к out.txt пути будут записаны так:

"../out.txt"

"d:/out.txt"

Обратите внимание, здесь две точки означают переход к родительскому каталогу, то есть, выход из каталога app на один уровень вверх.

И, наконец, для доступа к файлу prt.dat пути запишутся так:

"../parent/prt.dat"

"d:/ parent/prt.dat"

Вот так следует прописывать пути к файлам. В нашем случае мы имеем текстовый файл «myfile.txt», который находится в том же каталоге, что и программа ex1.py, поэтому путь можно записать просто указав имя файла:

file = open("myfile.txt")

В результате переменная file будет ссылаться на файловый объект, через который и происходит работа с файлами. Если указать неверный путь, например, так:

file = open("myfile2.txt")

то возникнет ошибка FileNotFoundError. Это стандартное исключение и как их обрабатывать мы с вами говорили на предыдущем занятии. Поэтому, запишем этот критический код в блоке try:

try:     file = open("myfile2.txt") except FileNotFoundError:     print("Невозможно открыть файл")

Изменим имя файла на верное и посмотрим, как далее можно с ним работать. По умолчанию функция open открывает файл в текстовом режиме на чтение. Это режим

mode = "r"

Если нам нужно поменять режим доступа к файлу, например, открыть его на запись, то это явно указывается вторым параметром функции open:

file = open("out.txt", "w")

В Python имеются следующие режимы доступа:

Название

Описание

'r'

открытие на чтение (значение по умолчанию)

'w'

открытие на запись (содержимое файла удаляется, а если его нет, то создается новый)

'x'

открытие файла на запись, если его нет генерирует исключение

'a'

открытие на дозапись (информация добавляется в конец файла)

Дополнения

'b'

открытие в бинарном режиме доступа к информации файла

't'

открытие в текстовом режиме доступа (если явно не указывается, то используется по умолчанию)

'+'

открытие на чтение и запись одновременно

Здесь мы имеем три основных режима доступа: на чтение, запись и добавление. И еще три возможных расширения этих режимов, например,

  • 'rt' – чтение в текстовом режиме;
  • 'wb' – запись в бинарном режиме;
  • 'a+' – дозапись или чтение данных из файла.

Чтение информации из файла

В чем отличие текстового режима от бинарного мы поговорим позже, а сейчас откроем файл на чтение в текстовом режиме:

file = open("myfile.txt")

и прочитаем его содержимое с помощью метода read:

В результате, получим строку, в которой будет находиться прочитанное содержимое. Действительно, в этом файле находятся эти строчки из поэмы Пушкина А.С. «Медный всадник». И здесь есть один тонкий момент. Наш текстовый файл имеет кодировку Windows-1251 и эта кодировка используется по умолчанию в функции read. Но, если изменить кодировку файла, например, на популярную UTF-8, то после запуска программы увидим в консоли вот такую белиберду. Как это можно исправить, не меняя кодировки самого файла? Для этого следует воспользоваться именованным параметром encoding и записать метод open вот так:

file = open("myfile.txt", encoding="utf-8" )

Теперь все будет работать корректно. Далее, в методе read мы можем указать некий числовой аргумент, например,

Тогда из файла будут считаны первые два символа. И смотрите, если мы запишем два таких вызова подряд:

print( file.read(2) ) print( file.read(2) )

то увидим, что при следующем вызове метод read продолжил читать следующие два символа. Почему так произошло? Дело в том, что у файлового объекта, на который ссылается переменная file, имеется внутренний указатель позиции (file position), который показывает с какого места производить считывание информации.

Когда мы вызываем метод read(2) эта позиция автоматически сдвигается от начала файла на два символа, т.к. мы именно столько считываем. И при повторном вызове read(2) считывание продолжается, т.е. берутся следующие два символа. Соответственно, позиция файла сдвигается дальше. И так, пока не дойдем до конца.

Но мы в Python можем управлять этой файловой позицией с помощью метода

seek(offset[, from_what])

Например, вот такая запись:

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

print( file.read(2) ) file.seek(0) print( file.read(2) )

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

pos = file.tell() print( pos )

Следующий полезный метод – это readline позволяет построчно считывать информацию из текстового файла:

s = file.readline() print( s )

Здесь концом строки считается символ переноса ‘\n’, либо конец файла. Причем, этот символ переноса строки будет также присутствовать в строке. Мы в этом можем убедиться, вызвав дважды эту функцию:

    print( file.readline() )     print( file.readline() )

Здесь в консоли строчки будут разделены пустой строкой. Это как раз из-за того, что один перенос идет из прочитанной строки, а второй добавляется самой функцией print. Поэтому, если их записать вот так:

    print( file.readline(), end="" )     print( file.readline(), end="" )

то вывод будет построчным с одним переносом.

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

    for line in file:         print( line, end="" )

Этот пример показывает, что объект файл является итерируемым и на каждой итерации возвращает очередную строку.

Или же, все строчки можно прочитать методом

и тогда переменная s будет ссылаться на упорядоченный список с этими строками:

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

По сути это все методы для считывания информации из файла. И, смотрите, как только мы завершили работу с файлом, его следует закрыть. Для этого используется метод close:

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

try:     file = open("myfile.txt")       try:         s = file.readlines()         print( s )     finally:         file.close()   except FileNotFoundError:     print("Невозможно открыть файл")

Мы здесь создаем вложенный блок try, в который помещаем критический текст программы при работе с файлом и далее блок finally, который будет выполнен при любом стечении обстоятельств, а значит, файл гарантированно будет закрыт.

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

try:     with open("myfile.txt", "r") as file:      # file = open("myfile.txt")         s = file.readlines()         print( s )   except FileNotFoundError:     print("Невозможно открыть файл")

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

finally:     print(file.closed)

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

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

Запись информации в файл

Теперь давайте посмотрим, как происходит запись информации в файл. Во-первых, нам нужно открыть файл на запись, например, так:

file = open("out.txt", "w")

и далее вызвать метод write:

file.write("Hello World!")

В результате у нас будет создан файл out.txt со строкой «Hello World!». Причем, этот файл будет располагаться в том же каталоге, что и файл с текстом программы на Python.

Далее сделаем такую операцию: запишем метод write следующим образом:

И снова выполним эту программу. Смотрите, в нашем файле out.txt прежнее содержимое исчезло и появилось новое – строка «Hello». То есть, когда мы открываем файл на запись в режимах

w, wt, wb,

то прежнее содержимое файла удаляется. Вот этот момент следует всегда помнить.

Теперь посмотрим, что будет, если вызвать метод write несколько раз подряд:

    file.write("Hello1")    file.write("Hello2")     file.write("Hello3")

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

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

   file.write("Hello1\n")    file.write("Hello2\n") file.write("Hello3\n")

Далее, для дозаписи информации в файл, то есть, записи с сохранением предыдущего содержимого, файл следует открыть в режиме ‘a’:

file = open("out.txt", "a")

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

то возникнет ошибка доступа. Если же мы хотим и записывать и считывать информацию, то можно воспользоваться режимом a+:

file = open("out.txt", "a+")

Так как здесь файловый указатель стоит на последней позиции, то для считывания информации, поставим его в самое начало:

   file.seek(0)    print( file.read() )

А вот запись данных всегда осуществляется в конец файла.

Следующий полезный метод для записи информации – это writelines:

file.writelines(["Hello1\n", "Hello2\n"])

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

Чтение и запись в бинарном режиме доступа

Что такое бинарный режим доступа? Это когда данные из файла считываются один в один без какой-либо обработки. Обычно это используется для сохранения и считывания объектов. Давайте предположим, что нужно сохранить в файл вот такой список:

books = [ ("Евгений Онегин", "Пушкин А.С.", 200), ("Муму", "Тургенев И.С.", 250), ("Мастер и Маргарита", "Булгаков М.А.", 500), ("Мертвые души", "Гоголь Н.В.", 190) ]

Откроем файл на запись в бинарном режиме:

file = open("out.bin", "wb")

Далее, для работы с бинарными данными подключим специальный встроенный модуль pickle:

И вызовем него метод dump:

Все, мы сохранили этот объект в файл. Теперь прочитаем эти данные. Откроем файл на чтение в бинарном режиме:

file = open("out.bin", "rb")

и далее вызовем метод load модуля pickle:

Все, теперь переменная bs ссылается на эквивалентный список:

Аналогичным образом можно записывать и считывать сразу несколько объектов. Например, так:

import pickle   book1 = ["Евгений Онегин", "Пушкин А.С.", 200] book2 = ["Муму", "Тургенев И.С.", 250] book3 = ["Мастер и Маргарита", "Булгаков М.А.", 500] book4 = ["Мертвые души", "Гоголь Н.В.", 190]   try:     file = open("out.bin", "wb")       try:         pickle.dump(book1, file)         pickle.dump(book2, file)         pickle.dump(book3, file)         pickle.dump(book4, file)       finally:         file.close()   except FileNotFoundError:     print("Невозможно открыть файл")

А, затем, считывание в том же порядке:

 file = open("out.bin", "rb")     b1 = pickle.load(file)     b2 = pickle.load(file)     b3 = pickle.load(file)     b4 = pickle.load(file)       print( b1, b2, b3, b4, sep="\n" )

Вот так в Python выполняется запись и считывание данных из файла.

Задания для самоподготовки

1. Выполните считывание данных из текстового файла через символ и записи прочитанных данных в другой текстовый файл. Прочитывайте так не более 100 символов.

2. Пользователь вводит предложение с клавиатуры. Разбейте это предложение по словам (считать, что слова разделены пробелом) и сохраните их в столбец в файл.

3. Пусть имеется словарь:

d = {"house": "дом", "car": "машина",
     "tree": "дерево", "road": "дорога",
     "river": "река"}

Необходимо каждый элемент этого словаря сохранить в бинарном файле как объект. Затем, прочитать этот файл и вывести считанные объекты в консоль.

Как в Python создать файл, записать и прочитать текст ~ PythonRu

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

Важно и то, что в Python этот процесс очень простой.

Как создать файл в Python в три строки

С помощью следующего кода можно создать файл с названием BabyFile.txt и записать в него текст «Привет, файл!»:


my_file = open("BabyFile.txt", "w+")
my_file.write("Привет, файл!")
my_file.close()

В начале объявляется переменная my_file. После этого используются встроенные функции open и write для открытия и записи в файл. "w+" сообщает, что запись будет осуществляться в новый файл. Если он существует, то новое содержимое нужно записать поверх уже существующего. Если же вместо этого использовать параметр "w", тогда файл будет создан только в том случае, если он не существовал до этого.

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

Как записывать, добавляя новое содержимое

С созданием файла разобрались. Теперь можно узнать, как редактировать, удалять и даже копировать файлы.

Если нужно добавить новые данные в файл, тогда вместо "w+" нужно просто использовать параметр "a+".


my_file = open("BabyFile.txt", "a+")
my_file.write("и еще кое-что!")
my_file.close()

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

Для чтения же файла нужно выполнить такую команду:


my_file = open("BabyFile.txt", "a+")
file_contents == my_file.read()
print(file_contents)
Привет, файл!и еще кое-что!

Удаление и перемещение файлов

Зная, как создавать файл, важно уметь определять, существует ли он в системе. Это важно, ведь в противном случае можно попробовать записать, отредактировать или удалить файл, которого не существует, что приведет к ошибке.

Для этого используется модуль os, который также по умолчанию доступен в Python. Достаточно лишь импортировать его и можно приступать к использованию — для этого используются path и методы isfile(), isdir() или exists().


os.path.isfile("/путь/к/файлу")

С помощью этого модуля можно даже переименовывать файлы. Это просто:


os.rename("/путь/к/файлу", "/новый_путь/к/переименованному_файлу")

Особенно круто то, что если отредактировать путь, то файл переместится в соответствующую локацию. Как вариант, можно также использовать модуль shutil:


shutil.move("/путь/к/файлу", "/новый_путь/к/переименованному_файлу")

Наконец, для удаления файлов используется os.remove().

Вот и все. Теперь вы знаете, как создавать файлы, изменять их или удалять.

Краткий итог

Как в Python создать файл

  1. Создать файл

    my_file = open("file.txt", "w+")

  2. Записать в файл

    my_file.write("Привет, файл!")

  3. Сохранить и закрыть файл

    my_file.close()

Появились вопросы? Задайте на Яндекс Q

У блога появилось сообщество на Q, подписывайтесь >> Python Q для меня это важно. Можете задавать вопросы по python и программированию в целом. Обещаю отвечать:)

Тест на знание python

Какой цикл `for` выведет такой результат?

Продолжить

Что выведет этот код?

Продолжить

Какой ввод НЕ приведет к ошибке?

Продолжить

Какие операторы можно использовать со строками?

Продолжить

Как в Python называется встроенная библиотека для использования регулярных выражений?

Продолжить

Продолжить

{{title}}

{{image}}

{{content}}

{{/global}}

Поделиться результатами через

Работа с файлами в Python

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

Как читать файлы

Python содержит в себе функцию, под названием «open», которую можно использовать для открытия файлов для чтения. Создайте текстовый файл под названием test.txt и впишите:

This is test file line 2 line 3 this line intentionally left lank

This is test file

line 2

line 3

this line intentionally left lank

Вот несколько примеров того, как использовать функцию «открыть» для чтения:

handle = open("test.txt") handle = open(r"C:\Users\mike\py101book\data\test.txt", "r")

handle = open("test.txt")

handle = open(r"C:\Users\mike\py101book\data\test.txt", "r")

В первом примере мы открываем файл под названием test.txt в режиме «только чтение». Это стандартный режим функции открытия файлов. Обратите внимание на то, что мы не пропускаем весь путь к файлу, который мы собираемся открыть в первом примере. Python автоматически просмотрит папку, в которой запущен скрипт для text.txt. Если его не удается найти, вы получите уведомление об ошибке IOError. Во втором примере показан полный путь к файлу, но обратите внимание на то, что он начинается с «r». Это значит, что мы указываем Python, чтобы строка обрабатывалась как исходная. Давайте посмотрим на разницу между исходной строкой и обычной:

>>> print("C:\Users\mike\py101book\data\test.txt") C:\Users\mike\py101book\data est.txt >>> print(r"C:\Users\mike\py101book\data\test.txt") C:\Users\mike\py101book\data\test.txt

>>> print("C:\Users\mike\py101book\data\test.txt")

C:\Users\mike\py101book\data    est.txt

 

>>> print(r"C:\Users\mike\py101book\data\test.txt")

C:\Users\mike\py101book\data\test.txt

Как видно из примера, когда мы не определяем строку как исходную, мы получаем неправильный путь. Почему это происходит? Существуют определенные специальные символы, которые должны быть отображены, такие как “n” или “t”. В нашем случае присутствует “t” (иными словами, вкладка), так что строка послушно добавляет вкладку в наш путь и портит её для нас. Второй аргумент во втором примере это буква “r”. Данное значение указывает на то, что мы хотим открыть файл в режиме «только чтение». Иными словами, происходит то же самое, что и в первом примере, но более явно. Теперь давайте, наконец, прочтем файл!

Введите нижеизложенные строки в скрипт, и сохраните его там же, где и файл test.txt.

handle = open("test.txt", "r") data = handle.read() print(data) handle.close()

handle = open("test.txt", "r")

data = handle.read()

print(data)

handle.close()

После запуска, файл откроется и будет прочитан как строка в переменную data. После этого мы печатаем данные и закрываем дескриптор файла. Следует всегда закрывать дескриптор файла, так как неизвестно когда и какая именно программа захочет получить к нему доступ. Закрытие файла также поможет сохранить память и избежать появления странных багов в программе. Вы можете указать Python читать строку только раз, чтобы прочитать все строки в списке Python, или прочесть файл по частям. Последняя опция очень полезная, если вы работаете с большими фалами и вам не нужно читать все его содержимое, на что может потребоваться вся память компьютера.

Давайте обратим внимание на различные способы чтения файлов.

handle = open("test.txt", "r") data = handle.readline() # read just one line print(data) handle.close()

handle = open("test.txt", "r")

data = handle.readline() # read just one line

print(data)

handle.close()

Если вы используете данный пример, будет прочтена и распечатана только первая строка текстового файла. Это не очень полезно, так что воспользуемся методом readlines() в дескрипторе:

handle = open("test.txt", "r") data = handle.readlines() # read ALL the lines! print(data) handle.close()

handle = open("test.txt", "r")

data = handle.readlines() # read ALL the lines!

print(data)

handle.close()

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!

После запуска данного кода, вы увидите напечатанный на экране список, так как это именно то, что метод readlines() и выполняет. Далее мы научимся читать файлы по мелким частям.

Как читать файл по частям

Самый простой способ для выполнения этой задачи – использовать цикл. Сначала мы научимся читать файл строку за строкой, после этого мы будем читать по килобайту за раз. В нашем первом примере мы применим цикл:

handle = open("test.txt", "r") for line in handle: print(line) handle.close()

handle = open("test.txt", "r")

 

for line in handle:

    print(line)

 

handle.close()

Таким образом мы открываем файл в дескрипторе в режиме «только чтение», после чего используем цикл для его повторения. Стоит обратить внимание на то, что цикл можно применять к любым объектам Python (строки, списки, запятые, ключи в словаре, и другие). Весьма просто, не так ли? Попробуем прочесть файл по частям:

handle = open("test.txt", "r") while True: data = handle.read(1024) print(data) if not data: break

handle = open("test.txt", "r")

 

while True:

    data = handle.read(1024)

    print(data)

 

    if not data:

        break

В данном примере мы использовали Python в цикле, пока читали файл по килобайту за раз. Как известно, килобайт содержит в себе 1024 байта или символов. Теперь давайте представим, что мы хотим прочесть двоичный файл, такой как PDF.

Как читать бинарные (двоичные) файлы

Это очень просто. Все что вам нужно, это изменить способ доступа к файлу:

handle = open("test.pdf", "rb")

handle = open("test.pdf", "rb")

Мы изменили способ доступа к файлу на rb, что значит read-binaryy. Стоит отметить то, что вам может понадобиться читать бинарные файлы, когда вы качаете PDF файлы из интернете, или обмениваетесь ими между компьютерами.

Пишем в файлах в Python

Как вы могли догадаться, следуя логике написанного выше, режимы написания файлов в Python это “w” и “wb” для write-mode и write-binary-mode соответственно. Теперь давайте взглянем на простой пример того, как они применяются.
ВНИМАНИЕ: использование режимов “w” или “wb” в уже существующем файле изменит его без предупреждения. Вы можете посмотреть, существует ли файл, открыв его при помощи модуля ОС Python.

handle = open("output.txt", "w") handle.write("This is a test!") handle.close()

handle = open("output.txt", "w")

handle.write("This is a test!")

handle.close()

Вот так вот просто. Все, что мы здесь сделали – это изменили режим файла на “w” и указали метод написания в файловом дескрипторе, чтобы написать какой-либо текст в теле файла. Файловый дескриптор также имеет метод writelines (написание строк), который будет принимать список строк, который дескриптор, в свою очередь, будет записывать по порядку на диск.

Выбирайте дешевые лайки на видео в YouTube на сервисе https://doctorsmm.com/. Здесь, при заказе, Вам будет предоставлена возможность подобрать не только недорогую цену, но и выгодные персональные условия приобретения. Торопитесь, пока на сайте действуют оптовые скидки!

Использование оператора «with»

В Python имеется аккуратно встроенный инструмент, применяя который вы можете заметно упростить чтение и редактирование файлов. Оператор with создает диспетчер контекста в Пайтоне, который автоматически закрывает файл для вас, по окончанию работы в нем. Посмотрим, как это работает:

with open("test.txt") as file_handler: for line in file_handler: print(line)

with open("test.txt") as file_handler:

    for line in file_handler:

        print(line)

Синтаксис для оператора with, на первый взгляд, кажется слегка необычным, однако это вопрос недолгой практики. Фактически, все, что мы делаем в данном примере, это:

handle = open("test.txt")

handle = open("test.txt")

Меняем на это:

with open("test.txt") as file_handler:

with open("test.txt") as file_handler:

Вы можете выполнять все стандартные операции ввода\вывода, в привычном порядке, пока находитесь в пределах блока кода. После того, как вы покинете блок кода, файловый дескриптор закроет его, и его уже нельзя будет использовать. И да, вы все прочли правильно. Вам не нужно лично закрывать дескриптор файла, так как оператор делает это автоматически. Попробуйте внести изменения в примеры, указанные выше, используя оператор with.

Выявление ошибок

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

try: file_handler = open("test.txt") for line in file_handler: print(line) except IOError: print("An IOError has occurred!") finally: file_handler.close()

try:

    file_handler = open("test.txt")

    for line in file_handler:

        print(line)

except IOError:

    print("An IOError has occurred!")

finally:

    file_handler.close()

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

try: with open("test.txt") as file_handler: for line in file_handler: print(line) except IOError: print("An IOError has occurred!")

try:

    with open("test.txt") as file_handler:

    for line in file_handler:

        print(line)

except IOError:

    print("An IOError has occurred!")

Как вы можете догадаться, мы только что переместили блок with туда же, где и в предыдущем примере. Разница в том, что оператор finally не требуется, так как контекстный диспетчер выполняет его функцию для нас.

Подведем итоги

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

Как писать в файл с помощью Python?

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

Как писать в файлы .txt в Python 3

Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
  5. Реклама Обратитесь к разработчикам и технологам со всего мира
  6. О компании
.

Python записать в файл - qaru Переполнение стека
  1. Около
  2. Товары
  3. Для команд
  1. Переполнение стека Общественные вопросы и ответы
  2. Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
  3. Вакансии Программирование и связанные с ним технические возможности карьерного роста
  4. Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
.

Запись файла Python


Запись в существующий файл

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

"a" - Добавить - добавит в конец файла

"w" - Запись - перезапишет любое существующее содержимое

Пример

Откройте файл "demofile2.txt" и добавьте в него содержимое:

f = open ("demofile2.txt", "a")
f.write ("Теперь в файле больше содержимого!")
f.close ()

# открыть и прочитать файл после добавления:
f = open ("demofile2.txt", "r")
print (f.read ())

Запустить пример »

Пример

Откройте файл "demofile3.txt" и перезапишите его содержимое:

f = open ("demofile3.txt", "w")
f.write ("Ой! Я удалил содержимое!")
f.close ()

# открыть и прочитать файл после добавления:
f = open ("demofile3.txt", "r")
print (f.read ())

Запустить пример »

Примечание: метод «w» перезапишет весь файл.


Создать новый файл

Чтобы создать новый файл на Python, используйте метод open () , с одним из следующих параметров:

"x" - Create - создаст файл, возвращает ошибка если файл существует

"a" - Добавить - создаст файл, если указанный файл не существует

"w" - Запись - создаст файл, если указанный файл не существует

Пример

Создайте файл с именем «myfile.txt ":

f = open ("myfile.txt", "x")

Результат: создан новый пустой файл!

Пример

Создать новый файл, если он не существует:

f = open ("myfile.txt", "w")



.

Чтение и запись файлов на Python (Руководство) - Real Python