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

Как указать относительный путь python

  • автор:

Как в python указать относительный путь для файла?

Если в php я указываю file_get_contents (__dir__ / path / file.txt) Подскажите как мне подобную запись сделать для питона?

Отслеживать
задан 26 ноя 2018 в 12:34
user254893 user254893
119 2 2 золотых знака 3 3 серебряных знака 9 9 бронзовых знаков
Какую «подобную»?
26 ноя 2018 в 12:37

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Если путь относителен файлу непосредственно переданного интерпретатору, то элементарно

open('path/file.txt') 

Если какому-то из импортированных, то чуть сложнее

from os import path parent_dir = path.dirname(path.abspath(__file__)) with open(path.join(parent_dir, 'path', 'file.txt')) as fh: . 

Различия в оставления пути к файлу в 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-последовательностей][escape-sequence], таких как новая строка ‘\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
  • Встроенные модули для работы с разными форматами

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

Работаю с txt файлом и указываю абсолютный путь, а хотелось бы использовать относительный. ‘../path/text.txt’ не работает и если поместить файл в папку с кодом, то тоже не будет работать. Какую библиотеку надо для такого пути подключить или это как-то по-другому делается?

path = 'My absolute path/text.txt' myfile = open(path, mode = 'a', encoding = 'utf-8')
  • Вопрос задан более трёх лет назад
  • 11043 просмотра

Как указать относительный путь к файлу через внешнюю папку?

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

  • Вопрос задан более двух лет назад
  • 2177 просмотров

Комментировать

Решения вопроса 1

shabelski89

Александр @shabelski89

>>> import os >>> c = os.getcwd() >>> c 'C:\\Users\\ashab' >>> d = os.path.split(c) >>> d ('C:\\Users', 'ashab') >>> test_folder = r'C:\Program Files\Common Files\Adobe' >>> d_test_folder = os.path.split(test_folder) >>> d_test_folder ('C:\\Program Files\\Common Files', 'Adobe') >>> d_test_folder[0] 'C:\\Program Files\\Common Files' >>>

Ответ написан более двух лет назад

Комментировать

Нравится Комментировать

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

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