Как создать путь к файлу python
Перейти к содержимому

Как создать путь к файлу python

  • автор:

Различия в составлении пути к файлу в Unix и Windows

При доступе к файлу в операционной системе требуется правильно указать путь к файлу. Путь к файлу — это строка, которая представляет местоположение файла.

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

# Unix /path/to/file/text.txt # Windows c:\path\to\file\text.txt

Он разбит на три основные части:

  1. Путь к файлу /path/to/file/ : расположение директории в файловой системе, где папки разделены прямой косой чертой ‘/’ в Unix подобных системах или обратной косой чертой ‘\’ в Windows.
  2. Имя файла text : фактическое имя файла.
  3. Расширение .txt : используется для указания типа файла.

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

>>> full_path = '/path/to/file/text.txt' >>> print(full_path) # /path/to/file/text.txt 

В системе Windows путь включает в себя обратную косую черту ‘\’ . Этот символ в строках на Python используется для экранирования escape-последовательностей, таких как новая строка ‘\n’ .

>>> full_path = 'c:\path\to\file\text.txt' >>> print(full_path) # c:\path o # ile ext.txt 

Что бы избежать Windows системах такого безобразия, нам нужно вручную экранировать обратную косую черту ‘\\’ или передавать в функции open() сырую (необработанную) строку, указав перед первой кавычкой строковой литерал ‘r’ :

# экранируем обратную косую черту >>> full_path = 'c:\\path\\to\\file\\text.txt' >>> print(full_path) # c:\path\to\file\text.txt # строковой литерал raw строки >>> full_path = r'c:\path\to\file\text.txt' >>> print(full_path) # c:\path\to\file\text.txt 

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

Строковое представление пути можно посмотреть функцией str() — это сам необработанный путь к файловой системе в собственном виде, например с обратным слешем в Windows, который можно передать любой функции, принимающей путь к файлу в виде строки:

>>> import pathlib # Код запущен на Unix системах >>> path = pathlib.Path('/foo', 'bar', 'baz') >>> path # PosixPath('/foo/bar/baz') >>> str(path) # '/foo/bar/baz' # Код запущен на Windows системе >>> path = pathlib.Path('c:/', 'foo', 'bar') >>> path # WindowsPath('c:/foo/bar') # Строковое представление пути # экранирование происходит автоматически >>> str(path) # 'c:\\foo\\bar' 

Переводить путь в текстовое представление не обязательно, т.к. объект пути модуля pathlib принимают все функции.

Оператор косой черты помогает создавать дочерние пути, аналогично os.path.join():

>>> import pathlib # Сложение путей файловой системы >>> p = pathlib.Path('/etc') >>> p # PosixPath('/etc') >>> p1 = p / 'init.d' / 'apache2' >>> p1 # PosixPath('/etc/init.d/apache2') >>> q = pathlib.Path('bin') >>> q1 = '/usr' / q >>> q1 # PosixPath('/usr/bin') 
# разложение пути >>> p = pathlib.Path('c:/Program Files/PSF') >>> p.parts # ('c:\\', 'Program Files', 'PSF') >>> p.is_dir() # True # определение диска >>> pathlib.Path('c:/Program Files/').drive # 'c:' >>> pathlib.Path('/Program Files/').drive # '' # определение родительской директории >>> p = pathlib.Path('c:/foo/bar/setup.py') >>> p.is_file() # True >>> p.parents[0] # WindowsPath('c:/foo/bar') >>> p.parents[1] # WindowsPath('c:/foo') >>> p.parents[2] # WindowsPath('c:/') # Двигаемся вверх по директории >>> for up in p.parents: . print(up) . # c:\foo\bar # c:\foo # c:\ 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Составление пути к файлу в Unix и Windows
  • Открытие/закрытие файла для чтения/записи
  • Типы обрабатываемых данных и файлов
  • Способы чтения открытого файла
  • Способы записи в открытый файл
  • Одновременное чтение из одного и запись в другой файл
  • Добавление данных в открытый файл
  • Управление указателем чтения/записи в файле
  • Создание менеджера для обработки файла
  • Сохранение словарей в формат JSON
  • Встроенные модули для работы с разными форматами

Модуль os.path

Python 3 логотип

os.path является вложенным модулем в модуль os, и реализует некоторые полезные функции для работы с путями.

os.path.abspath(path) — возвращает нормализованный абсолютный путь.

os.path.basename(path) — базовое имя пути (эквивалентно os.path.split(path)[1]).

os.path.commonprefix(list) — возвращает самый длинный префикс всех путей в списке.

os.path.dirname(path) — возвращает имя директории пути path.

os.path.exists(path) — возвращает True, если path указывает на существующий путь или дескриптор открытого файла.

os.path.expanduser(path) — заменяет ~ или ~user на домашнюю директорию пользователя.

os.path.expandvars(path) — возвращает аргумент с подставленными переменными окружения ($name или $ заменяются переменной окружения name). Несуществующие имена не заменяет. На Windows также заменяет %name%.

os.path.getatime(path) — время последнего доступа к файлу, в секундах.

os.path.getmtime(path) — время последнего изменения файла, в секундах.

os.path.getctime(path) — время создания файла (Windows), время последнего изменения файла (Unix).

os.path.getsize(path) — размер файла в байтах.

os.path.isabs(path) — является ли путь абсолютным.

os.path.isfile(path) — является ли путь файлом.

os.path.isdir(path) — является ли путь директорией.

os.path.islink(path) — является ли путь символической ссылкой.

os.path.ismount(path) — является ли путь точкой монтирования.

os.path.join(path1[, path2[, . ]]) — соединяет пути с учётом особенностей операционной системы.

os.path.normcase(path) — нормализует регистр пути (на файловых системах, не учитывающих регистр, приводит путь к нижнему регистру).

os.path.normpath(path) — нормализует путь, убирая избыточные разделители и ссылки на предыдущие директории. На Windows преобразует прямые слеши в обратные.

os.path.realpath(path) — возвращает канонический путь, убирая все символические ссылки (если они поддерживаются).

os.path.relpath(path, start=None) — вычисляет путь относительно директории start (по умолчанию — относительно текущей директории).

os.path.samefile(path1, path2) — указывают ли path1 и path2 на один и тот же файл или директорию.

os.path.sameopenfile(fp1, fp2) — указывают ли дескрипторы fp1 и fp2 на один и тот же открытый файл.

os.path.split(path) — разбивает путь на кортеж (голова, хвост), где хвост — последний компонент пути, а голова — всё остальное. Хвост никогда не начинается со слеша (если путь заканчивается слешем, то хвост пустой). Если слешей в пути нет, то пустой будет голова.

os.path.splitdrive(path) — разбивает путь на пару (привод, хвост).

os.path.splitext(path) — разбивает путь на пару (root, ext), где ext начинается с точки и содержит не более одной точки.

os.path.supports_unicode_filenames — поддерживает ли файловая система Unicode.

Для вставки кода на Python в комментарий заключайте его в теги

Относительный путь до файла на Python

Хочу добавить относительный путь в консольную программу на Python. (для возможности портирования на другие ПК). Пишет "No such file or directory". Абсолютный путь работает. Пытался каким-то образом изменить активную директорию, но не смог.

def download_fiels(): with open("../wordbooks/russian_nouns.txt", encoding='utf-8') as file: WORD_LIST = [row.strip() for row in file] with open("../wordbooks/russian_pril.txt", encoding='utf-8') as file: QUALITY_LIST = [row.strip() for row in file] with open("../wordbooks/russian_imena.txt", encoding='utf-8') as file: NAME_LIST = [row.strip() for row in file] return WORD_LIST, QUALITY_LIST, NAME_LIST 

Отслеживать

48.9k 17 17 золотых знаков 56 56 серебряных знаков 100 100 бронзовых знаков

Получение полного пути к текущей директории файла в Python

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

Алексей Кодов
Автор статьи
7 июля 2023 в 16:59

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

Например, представим, что у нас есть файл script.py , который расположен в директории C:\python27 . И нам нужно получить путь к этой директории.

Один из способов это сделать — использовать модуль os.path . В этом модуле есть функция abspath() , которая возвращает абсолютный путь к указанному файлу.

import os print(os.path.abspath(__file__))

Если запустить этот код из файла script.py , находящегося в директории C:\python27 , то на выходе получим: 'C:\\python27\\script.py' .

Но что, если нам нужен путь именно к директории, а не к файлу? В этом случае нам поможет еще одна функция модуля os.path — dirname() . Эта функция возвращает имя директории пути.

import os print(os.path.dirname(os.path.abspath(__file__)))

Теперь, если запустить этот код из файла script.py , на выходе получим именно то, что нам нужно: 'C:\\python27' .

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *