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

Введение

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

Сегодня наши программы тоже смогут так делать!

Что такое файл?

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

Но информация из оперативной пропадает при закрытии программы или перезагрузке компьютера. Что делать с данными, которые нужно хранить между запусками? Единственное решение - это хранить данные на энергонезависимом носителе - жестком диске (HDD) или твердотельном накопителе (SSD). Далее будет использоваться термин жесткий диск, хотя подразумевается любое из этих устройств.

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

Также, как и переменные, файлы занимают какое-то место, их размер измеряется в байтах.

Способ организации и хранения файлов на диске называется файловой системой.

Текстовые и бинарные файлы

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

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

Текстовые файлы могут иметь произвольные расширения, вам, возможно встречались .txt, .py, .html.

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

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

Как интерпретировать ту или иную группу байт в файле, нам говорит формат файла. Примеры бинарных файлов: .exe, .doc, .dll и тд..

Если открыть бинарный файл в блокноте, вы увидите много страшных символов - компьютер попытается интерпретировать все данные в файле как буквы.

Создаем текстовый файл

При работе с файлами всегда используется следующий алгоритм:

  • открытие файла
  • изменение или чтение файла
  • закрытие файла

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

Чтобы открыть файл, в питоне используется функция open(path, mode), которая принимает путь к файлу (абсолютный или относительный) и режим. Режим - это либо чтение (read), либо запись (write), либо добавление в конец файла (append).

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

Полный список режимов с описанием: https://docs.python.org/3/tutorial/inputoutput.html#reading-and-writing-files

Давайте создадим текстовый файл и запишем туда небольшой текст:

file = open('new.txt', 'w') # открываем файл new.txt для записи (w)
file.write("hello world! :)") # записываем строку в файл
file.close() # закрываем файл

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

После выполнения программы, в папке с кодом должен появиться новый файл new.txt, а в нем - строка "hello world".

Читаем текстовый файл

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

file = open('smiles.txt', 'r') # открываем файл smiles.txt для чтения (r)
text = file.read() # считываем все содержимое файла в переменную
file.close()

print(text[:100])

Файл smiles.txt можно скачать тут.

Используем with

Чтобы случайно не забыть закрыть файл после окончания работы с ним, используйте обертку with. Она автоматически закроет файл, как только закончится ее область видимости.

Пример:

with open('smiles.txt', 'r')  as file:
    text = file.read()
# файл автоматически закрылся
print(text[:100])