Поиск по сайту:

Как работать с обычными текстовыми файлами в Python 3


Введение

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

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

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

Предпосылки

Для этого руководства у вас должен быть установлен Python 3, а также настроена локальная среда программирования на вашем компьютере. Если это не так, вы можете выполнить настройку, следуя соответствующему руководству по установке и настройке для вашей операционной системы:

  • Ubuntu 22.04 или Debian 8
  • ЦентрОС 7
  • Mac OS X
  • Windows 10

Фон

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

File type Description
Plain text Plain text files store data that represents only characters (or strings) and excludes any structured metadata
CSV Comma-separated values files use commas (or other delimiters) to structure stored data, allowing data to be saved in a table format
HTML HyperText Markup Language files store structured data intended to be displayed by a browser and is commonly used with websites
JSON JavaScript Object Notation is a simple and efficient format, making it one of the most commonly used formats to store and transfer structured data

В этом руководстве основное внимание уделяется работе с файлами обычный текст.

Шаг 1 — Создание текстового файла

Прежде чем мы сможем начать работать в Python, нам нужно убедиться, что у нас есть файл для работы. Для этого откройте редактор кода и создайте новый текстовый файл с именем days.txt.

В новом файле введите несколько строк текста с указанием дней недели:

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Затем сохраните файл и запишите его местоположение. В этом примере наш пользователь sammy сохранил файл здесь как /home/sammy/days.txt. Это будет очень важно на последующих этапах, когда мы открываем файл в Python.

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

Шаг 2 — Открытие файла

В редакторе кода создайте новый файл Python и назовите его files.py.

Чтобы открыть файл в Python, нам сначала нужно каким-то образом связать файл на диске с переменной в Python. Этот процесс называется открытием файла, а переменная называется дескриптором файла. Мы начинаем с того, что сообщаем Python, где находится файл. Расположение вашего файла часто называют путь к файлу — в этом примере /home/sammy/days.txt. Создайте переменную для хранения этой информации о пути.

path = '/home/sammy/days.txt'

Теперь вы можете использовать функцию Python open(), чтобы открыть наш файл days.txt. Функция open() требует пути к файлу в качестве первого аргумента. Функция также принимает множество других параметров. Однако наиболее важным является необязательный параметр mode. Это необязательная строка, указывающая режим, в котором открывается файл. Выбранный вами режим будет зависеть от того, что вы хотите сделать с файлом. Вот некоторые из доступных режимов:

  • r : использовать для чтения из файла
  • w : используйте для записи в файл
  • a : используйте для добавления в файл
  • r+ : использовать для чтения и записи в один и тот же файл

В этом примере мы хотим читать только из файла, поэтому будем использовать режим r. Используйте функцию open(), чтобы открыть файл days.txt и присвоить результирующий дескриптор файла переменной days_file.

days_file = open(path, 'r')

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

Шаг 3 — Чтение файла

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

Использование чтения

Первая операция read() возвращает все содержимое файла в виде одной строки. Например:

days_file.read()

Результат будет:

Output
'Monday\nTuesday\nWednesday\nThursday\nFriday\nSaturday\nSunday\n'

Примечание. \n в приведенной выше строке представляет собой символ новой строки. При непосредственном взаимодействии с Python (как и при простом запуске python из командной строки) он будет использовать \n для отображения новых строк. Вы также можете использовать его для представления новой строки при создании собственных строк.

Использование строки чтения

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

days_file.readline()

Результат будет:

Output
'Monday\n'

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

days_file.readline()
Output
'Tuesday\n'

Использование строк чтения

Последняя операция readlines() возвращает список строк в файле, где каждый элемент списка представляет одну строку.

days_file.readlines()
Output
['Monday\n', 'Tuesday\n', 'Wednesday\n', 'Thursday\n', 'Friday\n', 'Saturday\n', 'Sunday\n']

Что нужно иметь в виду при чтении из файлов: после того, как файл был прочитан с помощью одной из операций чтения, он не может быть прочитан снова. Например, если вы сначала запустите days_file.read(), а затем days_file.readlines(), вторая операция вернет пустую строку. Поэтому каждый раз, когда вы хотите прочитать файл, вам придется сначала открыть новую файловую переменную или использовать метод seek(), что выходит за рамки этого руководства. Если вы хотите узнать больше, у Python есть отличная документация по этим методам.

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

Шаг 4 — Запись файла

На этом шаге вы создадите новый файл, содержащий заголовок Дни недели, за которым следует содержимое первого файла. Сначала создайте переменную title.

title = 'Days of the Week\n'

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

path = '/home/sammy/days.txt'
days_file = open(path, 'r')
days = days_file.read()

Теперь, когда у вас есть переменные для заголовка и дней недели, вы можете начать запись в новый файл. Во-первых, укажите местоположение файла. Опять же, мы будем использовать каталог /home/sammy/, поэтому наш путь будет /home/sammy/new_days.txt. Затем вы можете открыть новый файл в режиме записи, используя функцию open() с указанным режимом w.

new_path = '/home/sammy/new_days.txt'
new_days = open(new_path, 'w')

Примечание. Важно отметить, что если new_days.txt уже существует до открытия файла, его старое содержимое будет перезаписано, поэтому будьте осторожны при использовании режима w!

После открытия нового файла вы можете добавить данные с помощью метода write(). Этот метод принимает один строковый параметр и записывает эти данные в файл. Если вы хотите начать новую строку в файле, вы должны явно указать символ новой строки \n, который был включен, когда вы назначали Days of the Week\n для переменная title.

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

new_days.write(title)
print(title)

new_days.write(days)
print(days)

Наконец, когда вы закончите работу с файлом, важно закрыть его.

Шаг 5 — Закрытие файла

Закрытие файла гарантирует завершение соединения между файлом на диске и дескриптором файла. Закрытие файлов также гарантирует, что другие программы смогут получить к ним доступ, и ваши данные будут в безопасности. Если вы не используете операторы with, как описано в шаге 6, обязательно закрывайте файлы. В этом примере закройте все наши файлы с помощью метода close().

days_file.close()
new_days.close()

Теперь, когда сценарий закончил работу с файлами, он освобождает дескрипторы файлов с помощью метода close().

Шаг 6 — Использование операторов with (необязательно)

Рекомендуемый способ работы с файлами в Python (часто называемый способом Pythonic) — использовать функцию языка, называемую операторами with. Эти операторы представляют собой сокращенные способы настройки контекста, в котором выполняется работа, и, как только этот контекст заканчивается, окончательные детали автоматически учитываются, чтобы предотвратить распространенные ошибки. В случае работы с файлами оператор with автоматически закроет файл, чтобы у вас не осталось дескрипторов файлов, когда вы закончите свою задачу.

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

with open('/home/sammy/days.txt', 'r') as days_file:
    days = days_file.read()
    print(days)

Давайте шаг за шагом рассмотрим, что делает этот код. Как и раньше, мы открываем файл с помощью встроенной функции Python open(), передавая параметры пути и режима файла. Однако, поскольку мы используем оператор with, а не присваиваем результирующий дескриптор файла переменной с помощью =, мы присваиваем его с помощью as ключевое слово. Это часть полного синтаксиса оператора with:

with action as result:
    . . .

После : мы переходим к следующей строке и делаем отступ в нашем коде, именно так Python организует блоки функциональности. Как и прежде, у нас есть доступ к дескриптору файла в переменной days_file, поэтому мы можем вызвать метод read(), чтобы получить все содержимое и print( ) их.

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

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

with open(path, 'r') as days_file, open(new_path, 'w') as new_days:
    days = days_file.read()
    
    new_days.write(title)
    new_days.write(days)
    
print(title)
print(days)

Теперь код гораздо более организован. Мы начинаем, как и раньше, с определения некоторых переменных: путей к нашим двум файлам и заголовка, который мы будем использовать для заголовка нового файла. После этого мы начинаем наш оператор with, открывая наши два файла и сохраняя их соединения в переменных с соответствующими именами. Как и раньше, мы читаем содержимое days_file, затем записываем заголовок и это содержимое в new_days. Наконец, мы заканчиваем блок, удаляя отступ в нашем коде, чтобы напечатать значения title и days, которые мы прочитали.

Примечание. В отличие от некоторых других блоков Python, переменные, определенные в блоках with, доступны за пределами этой области.

Хотя в некоторых случаях вы захотите использовать метод close(), как описано ранее, и важно знать, как он работает, чаще всего вы будете использовать with операторы при работе с файлами в Python.

Шаг 7 — Проверка нашего кода

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

path = '/home/sammy/days.txt'
new_path = '/home/sammy/new_days.txt'
title = 'Days of the week\n'

with open(path, 'r') as days_file, open(new_path, 'w') as new_days:
    days = days_file.read()
    
    new_days.write(title)
    new_days.write(days)
    
print(title)
print(days)

После сохранения кода откройте терминал и запустите скрипт Python, например:

  1. python files.py

Вывод будет следующим:

Output
Days of the Week Monday Tuesday Wednesday Thursday Friday Saturday Sunday

Теперь еще раз проверьте работоспособность кода, открыв новый файл (new_days.txt). Если все прошло хорошо, он должен содержать следующее:

Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Заключение

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