img

Чтение файлов в Python: как открыть, прочитать и записать данные на Python

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

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

Предварительные требования:

  • Убедитесь, что у вас установлена последняя версия Python.
  • Ознакомьтесь с любым текстовым редактором, поддерживаемым Python, по вашему выбору.
  • Изучите базовые навыки синтаксиса Python.

Для быстрого доступа к Python IDE проверьте Replit. Вы также можете клонировать этот репозиторий и запустить его на Replit.

Постоянство данных и как загружать файлы в основную память

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

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

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

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

Как работают файловые дескрипторы

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

Если файл удалось открыть, ОС возвращает файловый дескриптор. После этого мы можем взаимодействовать с файлом через этот дескриптор.

Файловый дескриптор не содержит данные напрямую, он просто предоставляет интерфейс для выполнения операций с файлом.

Файловый дескриптор предоставляет вашей программе доступ к данным во вторичной памяти.

Как открыть файл

В этом примере мы откроем файл daffodils.txt. Обратите внимание, что этот файл должен находиться в той же папке, что и ваша программа на Python. Вы можете скачать файл daffodils.txt по этой ссылке на GitHub.

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

Пример

fhand = open('daffodils.txt')
print(fhand)

В приведенном выше примере операционная система вернет файловый дескриптор в переменной fhand, если открытие файла прошло успешно. По умолчанию вы можете только читать файл.

Вывод:

Файловый дескриптор отображается таким образом, где name — это имя файла, а mode — это разрешение, которое в нашем случае равно r (означает чтение). encoding — это механизм кодировки для набора символов Unicode.

Исключение:

Если файл не существует, мы получим исключение, например:

Как напечатать файл

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

Пример:

# Get the file handler
fhand = open('daffodils.txt')

# Loop through each line via file handler
for line in fhand:
  print(line)

Вывод:

Мы успешно получили доступ к файлу и напечатали его содержимое. Но вы заметили, что между строками появляются лишние пустые строки? Есть объяснение этому. Посмотрим в следующем разделе.

Как обрабатывать дополнительные пустые строки

Символ новой строки в Python представлен как \n. Этот символ добавляет новую строку, когда размещен в строке.

В конце каждой строки находится символ новой строки, который переводит вывод на следующую строку. Мы можем визуализировать это, используя метод repr().

Согласно документации Python, метод repr() возвращает строку, содержащую печатное представление объекта. Это означает, что мы можем увидеть любые специальные символы, такие как \t или \n, которые появляются в строке.

Запустим пример ниже и посмотрим на вывод.

Пример:

Возвращаемся к нашему файлу, мы можем использовать repr() для проверки специальных символов.

# Get the file handler
fhand = open('daffodils.txt')

# Loop through each line via file handler
for line in fhand:
  print(repr(line))

Вывод:

Здесь мы можем увидеть, что происходит "за кулисами".

Кроме того, метод print по умолчанию добавляет новую строку. Это означает, что при использовании print мы получаем еще одну новую строку в выводе. Мы можем обрабатывать эту дополнительную строку двумя способами.

Подход #1: Изменение значения по умолчанию end в print

Ниже приведен фрагмент кода, который показывает аргументы функции print. Мы видим, что по умолчанию значение end равно \n. Это означает, что каждое вызов print завершится символом новой строки \n.

Мы можем изменить значение по умолчанию end='\n' на пробел, чтобы не получать новую строку в конце каждой строки. Посмотрим пример ниже, чтобы лучше понять это.

# By default output would go in separate lines
print("Hello")
print("World")

# Print on the same line because end = ' '
# added single space
print("Hello", end = ' ') 
print("World")

Вывод:

Печать на одной и разных строках с использованием print()

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

# Get the file handler
fhand = open('daffodils.txt')

# Loop through each line and modify the default value of 'end'
for line in fhand:
  print(line, end = '')

Вывод:

И вот у нас желаемый вывод!

Печать без лишних строк с использованием print().

Подход #2: Использование метода rstrip()

Мы можем удалить определенные символы вокруг строки с помощью метода strip().

Теперь мы знаем, что по умолчанию каждая строка в файле заканчивается на \n. Поскольку нас интересует только символ справа, мы используем rstrip(), который означает "удаление справа". Рассмотрим пример использования rstrip() ниже.

# Get the file handler
fhand = open('daffodils.txt')

# Loop through each line and remove extra line character with rstrip()
for line in fhand:
  line = line.rstrip()
  print(line)

Вывод:

Печать без лишних строк с использованием rstrip().

Как позволить пользователю выбрать файл

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

Попросим пользователя ввести имя файла. Затем мы подсчитаем количество строк в файле.

Пример:

fname = input('Enter the file name: ')
fhand = open(fname)
count = 0
for line in fhand:
     count = count + 1
print('There are', count, 'lines in', fname)

Вывод:

Запрос пользователя на ввод имени файла.

Как записывать в файл на Python

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

  • w — (Запись) записывает в существующий файл, но стирает существующее содержимое.
  • a — (Добавление) добавляет к существующему файлу.
  • x — (Создание) создает файл и возвращает ошибку, если файл уже существует.

Как записать в файл

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

# Open file with mode 'w'
fout = open('flower.txt', 'w')
fout.write("This content would be added and existing would be discarded")
fout.close()

Как добавить в файл

Флаг a добавляет к существующему содержимому и сохраняет его.

# Open file with mode 'a'
fout = open('flower.txt', 'a')
fout.write("Now the file has more content at the end!")
fout.close()

Как создать файл и записать в него

Режим x создает файл и добавляет в него содержимое.

# Open file with mode 'x'
fout = open('new-file.txt', 'x')
fout.write("Now the new file has some content!")
fout.close()

 

Если файл уже существует, мы получим исключение:

Traceback (most recent call last):
  File "main.py", line 2, in <module>
    fout = open('flower.txt', 'x')
FileExistsError: [Errno 17] File exists: 'flower.txt'

Обработка исключений

Возможно, файл, который мы запрашиваем, не существует. Это приведет к сбою программы из-за исключения:

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

Рисковая часть программы, которая может вызвать сбой, записана в блоке try. Если код выполняется без исключений, блок except пропускается, и программа продолжает работу. Если возникает исключение, выполняется блок except, который завершает программу корректно с помощью команды exit.

fname = input('Enter the file name: ')
try:
  fhand = open(fname)
except:
  print('File nout found and can not be opened:', fname)
  exit()
count=0
for line in fhand:
  count = count + 1
print('There are', count, 'lines in', fname)

Вывод:

Обработка исключений с использованием блока try-except.

Подведение итогов

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

Все фрагменты кода и примерные файлы сохранены в этом репозитории на GitHub.

Надеемся, этот урок был полезен!

Ссылка
скопирована
Программирование
Скидка 25%
Python Advanced. Продвинутый курс
Освойте асинхронное и метапрограммирование, изучите аннотацию типов и напишите собственное приложение на FastAPI. Улучшите свои навыки Python, чтобы совершить быстрый рост вашего грейда до уровня middle.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Гипервизор - это программное обеспечение для виртуализации, используемое для создания и запуска виртуальных машин (ВМ). Гипервиз
img
Виртуализация серверов позволяет запускать несколько виртуальных машин на одном физическом сервере. Запуск виртуальных машин (ВМ
img
Сегодня мы рассмотрим, как настроить и использовать PHP в проекте. Но прежде чем начать, нужно понять, что такое PHP. Что такое
img
Как разработчик, вы знаете, что HTML расшифровывается как HyperText Markup Language (язык разметки гипертекста). HTML — это язык
img
Бесконечные споры вокруг искусственного интеллекта приводят к путанице. Существует много терминов, которые кажутся похожими, но
img
SVG расшифровывается как масштабируемая векторная графика. Это веб-дружелюбный векторный формат файлов, используемый для отображ
Комментарии
ОСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59