Рубрики
Без рубрики

Обработка файлов в Python

Автор оригинала: Guest Contributor.

Вступление

Существует неписаное мнение, что Python-один из лучших языков программирования для начинающих. Он чрезвычайно универсален, легко читается/анализируется и довольно приятен для глаз. Язык программирования Python обладает высокой масштабируемостью и широко рассматривается как один из лучших наборов инструментов для создания инструментов и утилит, которые вы можете использовать по разным причинам.

В этой статье мы кратко рассмотрим, как Python обрабатывает один из самых важных компонентов любой операционной системы: ее файлы и каталоги. К счастью, Python имеет встроенные функции для создания и управления файлами, либо плоскими файлами , либо текстовыми файлами . Модуль io является модулем по умолчанию для доступа к файлам, поэтому нам не нужно будет импортировать какую-либо внешнюю библиотеку для общих операций ввода-вывода.

Ключевыми функциями, используемыми для обработки файлов в Python, являются: open () , close () , read () , write() и append() .

Открытие файлов с помощью open()

Эта функция возвращает файловый объект под названием “handle”, который используется для чтения и записи в файл. Аргументы, которые может получить функция, следующие:

open(filename, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

Обычно требуются только параметры filename и mode , в то время как остальные используются неявно, заданные со значениями по умолчанию.

Следующий фрагмент кода показывает, как можно использовать эту функцию:

file_example = open ("TestingText.txt") 

Это откроет текстовый файл под названием “Тестовый текст” в режиме только для чтения. Обратите внимание, что был указан только параметр filename, это связано с тем, что режим “чтение” является режимом по умолчанию для функции open.

Режимы доступа, доступные для функции open () , следующие:

  • r : Открывает файл в режиме только для чтения. Начинается чтение с начала файла и является режимом по умолчанию для функции open () .
  • rb : Открывает файл только для чтения в двоичном формате и начинает чтение с начала файла. Хотя двоичный формат может использоваться для различных целей, он обычно используется при работе с такими вещами, как изображения, видео и т. Д. r+ : Открывает файл для чтения и записи, помещая указатель в начало файла.
  • w : Открывается в режиме только записи. Указатель помещается в начало файла, и это перезапишет любой существующий файл с тем же именем. Он создаст новый файл, если файл с таким же именем не существует.
  • wb : Открывает файл только для записи в двоичном режиме.
  • w+ : Открывает файл для записи и чтения.
  • wb+ : Открывает файл для записи и чтения в двоичном режиме.
  • a : Открывает файл для добавления в него новой информации. Указатель помещается в конец файла. Новый файл создается, если файл с таким же именем не существует.
  • ab : Открывает файл для добавления в двоичном режиме.
  • a+ : Открывает файл как для добавления, так и для чтения.
  • ab+ : Открывает файл как для добавления, так и для чтения в двоичном режиме.

Если и выполняемый файл Python, и целевой файл для чтения не существуют в одном каталоге, нам нужно передать полный путь к файлу для чтения в функцию open () , как показано в следующем фрагменте кода:

file_example = open ("F:\\Directory\\AnotherDirectory\\tests\\TestingText.txt")

Примечание : Следует всегда иметь в виду, что и имя файла, и путь указаны правильно. Если один из них неверен или не существует, то будет выдана ошибка FileNotFoundError , которая затем должна быть поймана и обработана вашей программой, чтобы предотвратить ее сбой.

Чтобы избежать этой проблемы, рекомендуется перехватывать ошибки с помощью блока try-finally для обработки исключения, как показано ниже.

try:
    file_example = open ("F:\\Directory\\AnotherDirectory\\tests\\TestingText.txt")
except IOError:
    print("An error was found. Either path is incorrect or file doesn't exist!")

finally:
    print("Terminating process!")

Чтение из файлов с помощью read()

Python содержит 3 функции для чтения файлов: read() , readline () и readlines() . Последние две функции являются просто вспомогательными функциями, которые облегчают чтение определенных типов файлов.

Для примеров, которые будут использованы, “TestingText.txt” содержит следующий текст:

Hello, world! Python is the way to coding awesomeness.

If you don't believe me, try it on your own.

Come, you will enjoy the Dark Side. We have cookies!

Метод чтения используется следующим образом:

file_example = open ("F:\\Directory\\AnotherDirectory\\tests\\TestingText.txt", "r")

print(file_example.read())

Результат будет следующим:

Hello, world! Python is the way to coding awesomeness.

If you don't believe me, try it on your own.

Come, you will enjoy the Dark Side. We have cookies!

Примечание : Специальные символы могут быть неправильно прочитаны с помощью функции read . Чтобы правильно читать специальные символы, вы можете передать параметр кодировки в функцию read() и установить его значение в utf 8 , как показано ниже:

file_example = open ("F:\\Directory\\AnotherDirectory\\tests\\TestingText.txt", "r", encoding="utf8" )

Кроме того, функция read() , а также вспомогательная функция readline () могут получать число в качестве параметра , который будет определять количество байтов для чтения из файла. В случае текстового файла это будет количество возвращаемых символов.

file_example = open ("F:\\Directory\\AnotherDirectory\\tests\\TestingText.txt", "r")

print(file_example.read(8))

Результат будет следующим:

Hello, w

Вспомогательная функция readline() ведет себя аналогично, но вместо того, чтобы возвращать весь текст, она возвращает одну строку.

file_example = open ("F:\\Directory\\AnotherDirectory\\tests\\TestingText.txt", "r")

print(file_example.readline())
print(file_example.readline(5))

В приведенном выше сценарии первый оператор print() возвращает первую строку и вставляет пустую строку в консоль вывода. Следующий оператор print() отделяется от предыдущей строки пустой строкой и начинается с новой строки, как показано в выводе:

Hello world! Python is the way to coding awesomeness.

If yo

Наконец, вспомогательная функция readlines() считывает весь текст и разбивает его на строки для удобства чтения. Взгляните на следующий пример:

print(file_example.readlines())

Выход из этого кода будет следующим:

Hello world! Python is the way to coding awesomeness. If you don't believe me, try it on your own. Come, you will enjoy the Dark Side. We have cookies!

Имейте в виду, что функция readlines() считается намного медленнее и неэффективнее , чем функция read () , без особых преимуществ. Одной из хороших альтернатив этому является использование цикла, который будет работать намного плавнее и быстрее:

file_example = open ("F:\\Directory\\AnotherDirectory\\tests\\TestingText.txt", "r")

for lines in file_example:
    print(lines) 

Обратите внимание, что если строка не будет напечатана, она будет заменена в буфере следующим оператором

Запись в файлы с помощью write()

При использовании этой функции любая информация внутри файла с таким же именем будет перезаписана. Его поведение похоже на функцию read () , но она вставляет информацию, а не читает ее.

file_example2 = open ("F:\\Directory\\AnotherDirectory\\tests\\TestingTextTwo.txt", "w")

file_example2.write("This is a test. Enjoy it!\n") #'\n' is for change line.

file_example2.write("Another thing to know is doing it slowly.\n")

file_example2.write("One by one. Yay!")

Если необходимо написать несколько строк, то вместо этого можно использовать подфункцию writelines() :

listOfThingsToSay = ["I like things like: \n", "Ice Cream\n", "Fruits\n", "Movies\n", "Anime\n", "Naps\n", "Jerky\n"]

file_example2 = open ("F:\\Directory\\AnotherDirectory\\tests\\TestingTextTwo.txt", "w")

file_example2.writelines(listOfThingsToSay)

Примечание : чтобы иметь возможность использовать функцию print () , режим должен быть установлен как w+ , что позволяет как читать, так и писать.

Добавление в файлы с помощью append()

Эта функция действует аналогично функции write () , однако вместо перезаписи файла функция append() добавляет содержимое к существующему файлу.

Если текстовый файл с именем “Testing Text Three” содержит следующую информацию:

Some essential things are missing in life and should not be avoided.

Для добавления нового текста можно использовать следующий код:

listOfThingsDo = ["You need at least to: \n", "Eat fried Ice Cream\n", "Go to Disney\n", "Travel to the moon\n", "Cook Pineapple Pizza\n", "Dance Salsa\n"]

file_example3 = open ("F:\\Directory\\AnotherDirectory\\tests\\TestingTextThree.txt", "a+")

file_example3.writelines(listOfThingsToDo)

for newline in file_example3
    print(newlines)

Результат будет следующим:

Some essential things are missing in life and should not be avoided.

You need at least to:

Eat fried Ice Cream

Go to Disney

Travel to the moon

Cook Pineapple Pizza

Dance Salsa

Закрытие открытых файлов с помощью close()

Функция close() очищает буфер памяти и закрывает файл. Это означает, что мы больше не сможем читать из файла, и нам придется снова открыть его, если мы хотим читать из него снова. Кроме того, некоторые операционные системы, такие как Windows, рассматривают открытые файлы как заблокированные, поэтому очень важно очистить их после себя в своем коде.

Используя ранее использованный пример кода, эта функция используется следующим образом:

file_example = open ("F:\\Directory\\AnotherDirectory\\tests\\TestingText.txt", "r")

print(file_example.read())

file_example.close()

Вывод

Python-один из самых надежных языков программирования, а также один из наиболее часто используемых. Его легко реализовать, а также проанализировать, что делает его идеальным инструментом для начинающих программистов. Кроме того, его универсальность делает его идеальной отправной точкой для начинающих программистов.

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