Top.Mail.Ru

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

Работа с файлами — одна из очень важных тем, которые позволяют решать различные повседневные задачи.
Файлы позволяют сохранять информацию между запусками программы, читать текстовые данные, хранить настройки, загружать и сохранять отчёты и многое другое.
Файл — это единица хранения данных; обычно текстовый или бинарный. В текстовом — хранятся строки, которые можно читать как обычный текст.
Для работы с файлами используется встроенная функция open ().

Например, мы хотим открыть файл и записать его в переменную file. Тогда синтаксис будет следующим:
file = open('имя_файла', 'режим')
— 'имя_файла' — путь к вашему файлу, например 'notes.txt'
— 'режим' — способ взаимодействия с файлом (чтение, запись и т. д.)

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

— 'r' — чтение (read): открыть для чтения (файл с таким именем должен уже существовать)
— 'w' — запись (write): открыть для записи (создаст новый или перезапишет существующий)
— 'a' — добавление (append): открыть для добавления (новый текст допишется в конец)

Например:
# открыть для чтения
file = open('mydata.txt', 'r')

# открыть для записи
file = open('mydata.txt', 'w')
В первом случае файл откроется только, если он уже существует и его можно будет только прочитать, а изменять его не получится.

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

Есть несколько способов считать содержимое текстового файла.
Во-первых, можно просто прочитать все содержимое с помощью метода read () и куда-то его записать:
file = open('notes.txt', 'r')
contents = file.read() # считывает ВСЁ содержимое файла в одну строку
print(contents) # печатает содержимое файла
В коде выше read () вытаскивает всё, что есть в файле, в одну переменную. Такой способ удобен для маленьких файлов.

А для более больших файлов удобно считывать файл не в одну строку, а в список строк:
file = open('notes.txt', 'r')
lines = file.readlines() # список, где каждая строка — элемент списка
for line in lines:
print(line.strip()) # strip убирает переход на новую строку
file.close()
Если в файле много строк — удобнее работать со списком.

А если файл совсем большой, то читать его сразу будет достаточно накладно для памяти компьютера, поэтому более оптимальный вариант — читать его построчно:
file = open('notes.txt', 'r')
line1 = file.readline() # первая строка
line2 = file.readline() # вторая строка
print(line1)
print(line2)
Можно также читать строки по одной, например, для обработки файла в цикле:
file = open('notes.txt', 'r')
for line in file:
print(line.strip())
file.close()
Такой способ экономит память для больших файлов.

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

Для записи используют режим 'w' (перезапись) или 'a' (добавление).

Например, создадим файл с нуля и что-то в него запишем. Для записи используется метод write ():
file = open('output.txt', 'w') # открываем файл в режиме перезаписи
file.write("Первая строка\n") # записываем первую строку
file.write("Вторая строка\n") # записываем в файл еще одну строку
Если файл с таким именем был, то всё, что было в файле, стирается. Если файла не было, он создался с нуля. Каждую новую строку мы здесь заканчивали \n — таким образом реализовывали переход на новую строку.

Если мы не хотим записывать файл с нуля, а хотим просто добавить какую-то новую информацию в существующий, то необходимо использовать режим 'a':
file = open('output.txt', 'a') # открываем файл в режиме дозаписи
file.write("Еще одна строка\n") # записываем строку
Новые строки при таком подходе добавляются в конец, не стирая старое содержимое.

После работы с файлом надо его закрыть — вызвать метод close ().
Это освобождает ресурсы и сохраняет все изменения.
file = open('notes.txt', 'r')
# работаем
file.close() # файл закрыт, изменения сохранены
Однако постоянно закрывать файлы не всегда удобно, и, чтобы объединить открытие и закрытие файла, часто удобнее использовать специальную конструкцию with — она сама закроет файл.
with open('notes.txt', 'r') as file:
for line in file:
print(line.strip())
# файл автоматически закрыт
Здесь мы с помощью with open открываем файл, а с помощью as file записываем его в переменную file. Далее с отступом мы прописываем все операции, которые хотим реализовать с файлом. После выхода из блока with файл автоматически закрывается.

Такая конструкция более удобна и чаще распространена при работе с файлами

Введение в Telegram-боты: регистрация, получение токена, основные понятия