Найти в Дзене
Интернет сегодня

python: Работа с текстовыми файлами

Оглавление

Язык программирования 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())
>> Привет мир!!
>>Привет мир!
>>Я здесь!
>>Здесь кто-нибудь есть?
>>Здесь кто-нибудь есть?

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

Если вам понравилась статья, поставьте лайк, был рад помочь!