Работа с файлами
Введение
Любая программа, которая выполняется на компьютере пользователя скорее всего взаимодействует с файловой системой: умеет открывать файлы, сохранять их в своих форматах, возможно, хранит в файлах настройки.
Сегодня наши программы тоже смогут так делать!
Что такое файл?
До этого момента вся информация, с которой мы работали, хранилась исключительно в оперативной памяти - в переменных.
Но информация из оперативной пропадает при закрытии программы или перезагрузке компьютера. Что делать с данными, которые нужно хранить между запусками? Единственное решение - это хранить данные на энергонезависимом носителе - жестком диске (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])