Python - удобный язык, который часто используется для написания сценариев, анализа данных и веб-разработки.

В этой статье мы рассмотрим, как читать и записывать файлы с помощью Python.

Файлы и пути к файлам

У файла есть имя для ссылки на файл. У него также есть путь для определения местоположения файла.

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

Обратная косая черта в Windows и прямая косая черта в macOS и Linux

В Windows путь состоит из обратной косой черты. Во многих других операционных системах, таких как macOS и Linux, путь состоит из косых черт.

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

Например, мы можем импортировать pathlib следующим образом и создать объект Path следующим образом:

from pathlib import Path
path = Path('foo', 'bar', 'foo.txt')

После выполнения кода path должен быть Path объектом, подобным следующему, если мы запускаем указанную выше программу в Linux или macOS:

PosixPath('foo/bar/foo.txt')

Если мы запустим приведенный выше код в Windows, мы получим объект WindowsPath вместо объекта PosixPath.

Использование оператора / для объединения путей

Мы можем использовать оператор / для объединения путей. Например, мы можем переписать путь, который у нас был, в следующий код:

from pathlib import Path
path = Path('foo')/'bar'/'foo.txt'

Тогда мы получим тот же результат, что и раньше.

Это также будет работать в Windows, macOS и Linux, поскольку Python соответствующим образом отсортирует путь.

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

Например:

path = '/'.join(['foo', 'bar', 'foo.txt'])

не будет работать в Windows, так как путь имеет косую черту.

Текущий рабочий каталог

Мы можем получить текущий рабочий каталог (CWD), который является каталогом, в котором запущена программа.

Мы можем изменить CWD с помощью функции os.chdir и получить текущий CWD с помощью функции Path.cwd.

Например, мы можем написать:

from pathlib import Path
import os
print(Path.cwd())
os.chdir(Path('foo')/'bar')
print(Path.cwd())

Тогда получаем:

/home/runner/AgonizingBasicSpecialist
/home/runner/AgonizingBasicSpecialist/foo/bar

как выход.

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

Домашний каталог

Домашний каталог - это корневой каталог папки профиля учетной записи пользователя.

Например, мы можем написать следующее:

from pathlib import Path
path = Path.home()

Тогда значение path будет чем-то вроде PosixPath(‘/home/runner’).

Абсолютные и относительные пути

Абсолютный путь - это путь, который всегда начинается с корневой папки. Относительный - это путь относительно текущего рабочего каталога программы.

Например, в Windows C:\Windows - это абсолютный путь. Относительный путь - это что-то вроде .\foo\bar. Он начинается с точки, а foo находится внутри текущего рабочего каталога.

Создание новых папок с помощью функции os.makedirs ()

Мы можем создать новую папку с функцией os.makedirs.

Например, мы можем написать:

from pathlib import Path
Path(Path.cwd()/'foo').mkdir()

Затем мы создаем каталог foo внутри нашего текущего рабочего каталога.

Обработка абсолютных и относительных путей

Мы можем проверить, является ли путь абсолютным путем с помощью метода is_absolute.

Например, мы можем написать:

from pathlib import Path
is_absolute = Path.cwd().is_absolute()

Тогда мы должны увидеть is_absolute равным True, поскольку Path.cwd() возвращает абсолютный путь.

Мы можем вызвать os.path.abspath, чтобы вернуть строку с абсолютным путем переданного нами аргумента path.

Например, учитывая, что у нас есть каталог foo в текущем рабочем каталоге, мы можем написать:

from pathlib import Path
import os
path = os.path.abspath(Path('./foo'))

чтобы получить абсолютный путь к папке foo.

У нас должно получиться что-то вроде:

'/home/runner/AgonizingBasicSpecialist/foo'

как значение path.

os.path.isabs(path) - это метод, который возвращает True - это абсолютный путь.

Метод os.path.relpath(path, start) вернет строку относительного пути от пути start до path.

Если start не указан, то текущий рабочий каталог используется как начальный путь.

Например, если у нас есть папка /foo/bar в нашем домашнем каталоге, то мы можем получить путь ./foo/bar относительно домашнего каталога, написав:

from pathlib import Path
import os
path = os.path.relpath(Path.home(), Path('./foo')/'bar')

Тогда path имеет значение ‘../../..’.

Заключение

Мы можем использовать модули path и os для построения путей и управления ими.

Кроме того, мы также можем использовать / с объектами Path для создания пути, который работает со всеми операционными системами.

Мы также можем указать пути к функции Path для построения путей.

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

Примечание от Python In Plain English

Мы всегда заинтересованы в продвижении качественного контента. Если у вас есть статья, которую вы хотите отправить в какую-либо из наших публикаций, отправьте нам электронное письмо по адресу [email protected] с вашим именем пользователя Medium, и мы добавим вас в качестве автора.