Язык программирования python позволяет программистам делать множество вещей, взаимодействовать с сетью (библиотека requests), создавать графический интерфейс программ (PyQt5), даже делать игры (pygame), но большинство программ должны уметь сохранять и извлекать информацию из внешних файлов.
Типы файлов с точки зрения программиста
С точки зрения программиста на python есть всего 2 типа файлов: это текстовый файл (с ним программист может взаимодействовать с помощью встроенных средств языка) и бинарный файл (excel файлы, изображения, видео и т.д. Работать с такими файлами нужно используя внешние библиотеки).
Сегодня мы разберём как работать с первым типом файлов.
В языке python есть функция open(название файла, [режим доступа])
Всего есть 12 разных режимов доступа, но мы рассмотрим самые основные:
- 1. "r" - только чтение
- 2. "w" - только запись. Создает файл с указанным названием, если такого не существует
- 3. "a" - Только дополнение. Создает файл с указанным названием, если такого не существует
А также их дополненные версии:
- "r+" - чтение и запись
- "w+" - чтение и запись. Создает файл с указанным названием, если такого не существует
- "a+" - чтение и дополнение. Создает файл с указанным названием, если такого не существует
То есть если мы откроем файл с режимом доступа "w" или "w+", то содержимое файла удалится и мы будем записывать данные уже в пустой файл, а если мы не хотим, чтобы данные удалялись, нам нужно применить "a" или "a+".
Разберём на примерах. Давайте создадим файл test.txt и запишем туда строку "Hello world!"
Режимы "w" и "w+"
file = open('test.txt', 'w') # Используем функцию open с режимом "w"
file.write("Hello world!") # Метод write(текст) для записи в файл
file.close() # Обязательно закрыть файл в конце
Если не закрыть файл, то могут произойти разные ошибки, так что лучше всегда файлы закрывать. Есть другой способ записи данного кода, который больше любят в сообществе программистов:
with open('test.txt', 'w') as file:
file.write("Hello world!")
С этим способом можно не закрывать файл явно, он закроется автоматически, когда программа выйдет из блока with. Для всех остальных примеров я буду использовать этот способ.
Теперь разберём режим "w+":
with open('test.txt', 'w+') as file:
file.write("Hello world!") # В пустой файл записываем текст
file.seek(0) # Возвращаем курсор в начальную позицию
print(file.read()) # Читаем содержимое файла
>> Hello world!
Когда мы записали текст в файл, наш виртуальный курсор стоит в самом конце текста, чтобы прочитать файл, мы должны обязательно поместить его в начало текста методом seek(0).
Режимы "r" и "r+"
Для чтения нашего файла test.txt нужно просто написать следующую программу:
with open('test.txt', 'r') as file:
print(file.read())
>> Hello world!
Метод read() может принимать аргументы, это число символов, которые он будет читать. Например:
with open('test.txt', 'r') as file:
print(file.read(5)) # Только первые 5 символов всего текста
>> Hello
Давайте вручную добавим в файл ещё несколько строк:
<< Содержимое файла test.txt >>
Hello world!
Привет мир!
Я здесь!
И немного изменим программу:
with open('test.txt', 'r') as file:
print(file.readlines())
>> ['Hello world!\n', 'Привет мир!\n', 'Я здесь!']
Метод readlines() последовательно считывает строки файла и добавляет их в список.
Режим r+ отличается от w+ тем, что если файла test.txt не существует, то вылетит ошибка, и тем, что содержимое файла не удаляется, а метод write() записывает текст "поверх" уже записанного:
with open('test.txt', 'r+') as file:
file.write("Привет мир!")
file.seek(0)
print(file.read())
>> Привет мир!!
>> Привет мир!
>> Я здесь!
То есть поверх строки "Hello world!" записалась строка "Привет мир!" и получилось "Привет мир!!"
Режимы "a" и "a+"
Дополним наш файл строкой "Здесь кто-нибудь есть?":
with open('test.txt', 'a') as file:
file.write("\nЗдесь кто-нибудь есть?")
Теперь содержимое файла:
Привет мир!!
Привет мир!
Я здесь!
Здесь кто-нибудь есть?
Как видим, строка записалась в конец файла. Режим "a+" работает аналогично "w+":
with open('test.txt', 'a+') as file:
file.write("\nЗдесь кто-нибудь есть?")
file.seek(0)
print(file.read())
>> Привет мир!!
>>Привет мир!
>>Я здесь!
>>Здесь кто-нибудь есть?
>>Здесь кто-нибудь есть?
Тут тоже необходимо поместить курсор в начало текста, что бы его прочитать.
Если вам понравилась статья, поставьте лайк, был рад помочь!