Содержание

Относительный путь к файлу | by sergeybr94 | Medium

4 min read

·

Mar 10, 2021

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

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

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

https://www.mysite.ru/source/img/main.png

  1. https:// — протокол подключения к сайту
  2. www.mysite.ru — домен
  3. source, img — папки
  4. main.png — нужный нам файл

Выглядит вроде просто. Но на практике, никто не указывает абсолютный путь к файлу при верстке страниц. Для этого всегда используют относительный.

Для правильного построения относительного пути, нужно разобраться с его синтаксисом:

  • Знак точка “ . ” — указывает на текущую (корень) папку, где находится файл
  • Две точки “ . . ” — указывает на родителя текущей папки, где находится файл
  • Слэш “ / ” — показывает какую следующую папку/файл будет выбирать

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

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

Теперь напишем простой относительный путь до картинки first.png . Для этого, в файле index.html нужно прописать вот такую строчку:

Все работает. И можно было бы закончить, но нет 😁.

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

Если бы, вы в начале пути указали / или C:// , это являлось бы абсолютным путем. Слэш в начале “ / ” (для Linux систем) или “ C:// ” (для windows) в начале показывает, что поиск файла будет происходит начиная от корня вашего диска (файловой системы).

Как реально выглядит расположение нашего проекта?

Корень проекта, тоже является папкой, поэтому не забывайте об этом.

Алгоритм работы поиска файла

Прописывая вот такой путь до файла:

Браузер начинает его искать вот таких образом:

  1. Подключение картинки написано в файле index.html. Смотрит где находится файл index.html. Находит эту папку. Это корень проекта
  2. В корне проекта ищет папку source. Если нашел, все ок, идем дальше
  3. В папке source ищет папку img
  4. В папке img находит файл first.png

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

Точка

Давайте теперь рассмотрим вариант посложнее.

В начале прописали ./ . Что же это значит? Я уже писал об этом ранее:

  • Точка указывает на текущую папку, где находиться файл index. html. Т.е. на корень проекта
  • Слэш после точки указывает, что внутри корня проекта будет искать папку, которая находиться после него. Т.е. source

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

Две точки

Но это еще не все. Давайте немного поменяем проект и добавим еще одну папку и страницу:

У нас появились новая папка about, в корне проекта, а в ней страница home.html

И если мы захотим использовать ту же запись для подключения картинки на странице home.html, то она не сработает. Потому, что поиск будет теперь происходить относительно папки about, а не корня проекта, как ранее.

Что же делать? На помощь нам приходят две точки “ .. ”.

Две точки позволяют, так сказать, провалиться на уровень выше. Т.е. поиск будет происходить не от текущей папки home, а от корня проекта.

  1. Подключение картинки написано в файле home.html. Смотрит где находится файл home.html. Находит эту папку. Это папка about
  2. Дальше смотрит кто является родителем папки about. Им является корень проекта
  3. В корне проекта ищет папку source. Если нашел, все ок, идем дальше
  4. В папке source ищет папку img
  5. В папке img находит файл first.png

Если, например, внутри папки home была еще одна папка, и в ней была бы еще одна страница, то путь до файла first.png, внутри этой страницы, выглядел бы вот так:

Теперь все

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

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

Python путь к файлу и расширение — Получение имени из полного пути

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

Абсолютный путь к файлу

Для того чтобы узнать в Python абсолютный путь к файлу, потребуется воспользоваться библиотекой os. Её подключаем с помощью команды import os. В классе path есть метод abspath. Вот пример использования.

import os
p = os.path.abspath('file.txt ')
print(p)

C:\python3\file.txt

Так же можно воспользоваться и стандартной библиотекой pathlib. Она вошла в состав основных библиотек, начиная с версии Python 3.4. До этого надо было ее инсталлировать с помощью команды pip install pathlib. Она предназначена для работы с путями файловой системы в разных ОС и отлично подойдет для решения данной задачи.

import pathlib
p = pathlib.Path('file.txt ')
print(p)

C:\python3\file.txt

Имя файла

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

import os name = os.path.basename(r'C:\python3\file.txt ') print(name) file.txt

Здесь перед строкой вставил r, чтобы подавить возможное возникновение служебных символов. Например, в данном случае если не указать r, то \f считалось бы символом перевода страницы.

Без расширения

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

from os import path
full_name = path.basename(r'C:\python3\file.tar.gz ')
name = path.splitext(full_name)[0]
print(name)

file.tar

Видно, что последнее расширение архиватора gz было отброшено, в то время как расширение несжатого архива tar осталось в имени.

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

Дополним предыдущий пример следующим кодом:

index = name.index('.')
print(name[:index])

file

Расширение файла

В Python получить расширение файла можно аналогичным образом с помощью той же функции splitext.  Она возвращает кортеж. Первый элемент кортежа имя, а второй – расширение. В данном случае нам нужен второй элемент. Индекс второго элемента равен единице, так как отсчет их идет от нуля.

from os import path
full_name = path.basename(r'C:\python3\file.tar.gz ')
name = path.splitext(full_name)[1]
print(name)

.gz

Аналогично можно воспользоваться библиотекой pathlib. Воспользуемся методом suffix.

from pathlib import Path
print(Path(r'C:\python3\file.tar.gz ').suffix)

.gz

Но в нашем случае два расширения. Их можно узнать с помощью функции suffixes. Она возвращает список, элементами которого и будут расширения. Ниже приведен пример получения списка расширений.

from pathlib import Path
print(Path(r'C:\python3\file.tar.gz ').suffixes)

['.tar', '.gz ']

Для того, чтобы получить имя файла или расширение из полного пути или для получения абсолютного пути к файлу используйте библиотеки os и pathlib. Лучше воспользоваться готовым решением из стандартой библиотеками, чем писать свое решение.

Понимание относительных путей к файлам

* В этой статье я использую термин «каталог». В целях разъяснения вы можете поменять местами слово «папка» на «каталог».

Пути к файлам — частый камень преткновения для начинающих программистов.

Во-первых, в чем разница между относительным путем к файлу и абсолютным путем к файлу ? Относительный путь описывает расположение файла относительно текущего (рабочего) каталога*. абсолютный путь описывает местоположение из корневого каталога. При обучении доступу к файлам данных с помощью программирования мы регулярно используем относительных пути к файлам .

Описание пути относительно текущего (рабочего) каталога

В этих примерах Java мы определяем путь к файлу EQs_last_last_week_of_2021.csv . Файл данных находится в каталоге геологических , который находится в каталоге файлов данных .

– случай, когда файлы данных

каталог находится в текущем каталоге
String filePath = "./data-files/geological/EQs_last_week_of_2021.csv";

– случай, когда data-файлов каталога вверх на один уровень (в родительском каталоге)
String filePath = "../data-files/geological/EQs_last_week_of_2021.csv";

– случай, когда каталог data-files находится на два уровня выше (в прародительском каталоге)
String filePath = "../../data-files/EQs_last_week_of_2021.csv";

– случай, когда каталог data-files находится на три уровня выше (в каталоге прародителя)
String filePath = ".

./../../data-files/EQs_last_week_of_2021.csv";

Давайте продолжим этот пример. Мы пишем код, который обращается к файлу данных (с именем EQs_last_last_week_of_2021.csv ) и считывает данные о землетрясениях по одной строке (одно землетрясение) за раз. Файл имеет формат .csv , что означает, что значения разделены запятыми (значения, разделенные запятыми).

Какой путь к файлу подойдет? Это зависит от структуры файла.

На рисунке 1 мы используем:
String filePath = «../../../data-files/geological/EQs_last_week_of_2021.csv»;

Обратите внимание:

1) Файл ReadData.java

находится внутри каталога BuffemaroonReader-example . (текущий уровень)

2) Каталог buffemaroonreader-class-examples находится внутри каталога java-examples . (на один уровень выше)

3) Каталог java-examples находится внутри каталога программирования с файлами данных . (на два уровня выше)

4) Каталог программирование с файлами данных находится в том же каталоге, что и каталог файлов данных . (на три уровня вверх)

На рисунке 2 мы используем:

String filePath = «../../data-files/geological/EQs_last_week_of_2021.csv»;

Обратите внимание, что:

5) Файл ReadData.java находится внутри BuffemaroonReader-пример каталога . (текущий уровень)

6) Каталог buffemaroonreader-class-examples находится внутри каталога java-examples . (на один уровень вверх)

7) Каталог java-examples находится в том же каталоге, что и каталог data-files . (на два уровня вверх)

На рисунке 3 мы используем:
String filePath = «../data-files/geological/EQs_last_week_of_2021.csv»;

Обратите внимание:

8) Файл ReadData.java находится в каталоге BuffemaoonReader-example .

9) Каталог buffemaroonreader-class-examples находится внутри каталога java-examples , который находится в том же каталоге, что и каталог data-files . (на один уровень выше)

Кстати, структура, показанная на рис. 3, не является хорошей практикой. Глупо помещать каталог data-files в каталог java-examples , потому что к файлу данных можно получить доступ с помощью любого старого языка программирования. С каталогом

data-files здесь, в каталоге java-examples , было бы сложно получить доступ к файлу данных из файлов в каталоге python-examples .

На рисунке 4 мы используем:
String filePath = «./data-files/geological/EQs_last_week_of_2021.csv»;

Обратите внимание, что:

10) Файл ReadData.java и 9Оба каталога 0023 data-files находятся внутри каталога Programming-with-data-files . (текущий уровень)

Обратите внимание, что я каждый раз компилирую и запускаю класс ReadData из его собственного каталога (используя КОНСОЛЬ).

Кнопка Coding Rooms RUN запускается из родительского каталога. При использовании кнопки RUN правильный путь к файлу изменяется соответствующим образом.


Хотите поиграть с путями к файлам и доступом к файлам данных? Проверьте мое рабочее пространство ниже. Нажмите «Разветвить», чтобы получить собственную копию на Coding Rooms!

В чем разница между относительным и абсолютным путем?

Обновлено: 01.02.2021 автором Computer Hope

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

  • Различия путей в Windows.
  • Различия путей в Linux.
  • Различия путей в веб-адресе.
  • Как создать рабочий относительный путь.

Различия путей в Windows

Абсолютный путь Windows

 C:\Windows\calc.exe 

Неабсолютный путь Windows (относительный путь)

 calc.exe 

В приведенном выше примере абсолютный путь содержит полный путь к файлу, а не только имя файла, как показано в неабсолютном пути . В этом примере, если вы находитесь в каталоге, который не содержит «calc.exe», вы получите сообщение об ошибке. Однако при использовании абсолютного пути вы можете находиться в любом каталоге, и компьютер будет знать, где открыть файл «calc.exe».

Как найти абсолютный путь в Windows

Вы можете определить абсолютный путь к любому файлу в Windows, щелкнув файл правой кнопкой мыши и выбрав Свойства . В свойствах файла сначала посмотрите на «Расположение:», которое является путем к файлу. На картинке ниже это место «c:\odesk\computer_hope». Затем добавьте обратную косую черту, а затем имя файла в конце пути. Эти действия сделают приведенный ниже пример файла абсолютным путем «c:\odesk\computer_hope\chrome. jpg».

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

Из командной строки Windows можно найти абсолютный путь к любому файлу, просмотрев текущий каталог. Например, если ваше приглашение было «C:\Windows>» и вы хотели узнать абсолютный путь к файлу calc.exe в этом каталоге, его абсолютный путь будет «c:\windows\calc.exe». Другими словами, абсолютный путь — это полный путь к каталогу плюс имя файла.

Различия путей в Linux

Абсолютный путь Linux

 /home/users/c/computerhope/public_html/cgi-bin 

Относительный путь Linux

 ./public_html/cgi-bin 

В приведенном выше примере абсолютный путь содержит полный путь к каталогу cgi-bin на этом компьютере.

Относительный путь начинается с точки (точки), обозначающей текущий каталог (также называемый «рабочим каталогом»). Относительный путь ./public_html/cgi-bin действителен, только если текущий каталог содержит путь с именем public_html , который содержит каталог с именем cgi-bin .

Как найти абсолютный путь к файлу в Linux

Поскольку большинство пользователей не хотят видеть полный путь в качестве подсказки, он относится к их личному каталогу, как показано выше. Чтобы найти полный абсолютный путь к текущему каталогу, используйте команду pwd.

После того как вы определили путь к текущему каталогу, абсолютным путем к файлу является путь плюс имя файла. Например, если в каталоге cgi-bin у нас есть файл с именем «example.cgi», абсолютный системный путь к файлу будет «/home/users/c/computerhope/public_html/cgi-bin/example.cgi».

Как найти абсолютный путь к файлу в Linux для веб-страницы

При работе на Linux-компьютере, используемом в качестве веб-сервера для показа веб-страниц в Интернете. Может быть сложно понять, что использовать для относительного и абсолютного пути. Мы обнаружили, что большая часть этой путаницы возникает из-за непонимания того, что корневым каталогом вашей веб-страницы является каталог public_html.

В примере с абсолютным путем, показанном выше, при связывании файлов онлайн абсолютный путь будет начинаться с «public_html/», что сделает абсолютный путь «public_html/cgi-bin» для каталога cgi-bin.

Различия путей в веб-адресе

Абсолютный путь URL-адреса в Интернете

 https://www.computerhope.com/oh.htm 

Относительный путь URL-адреса в Интернете

 ох.хтм 

Наконец, в этом последнем примере абсолютным путем в Интернете является домен и веб-страница в этом домене. Веб-разработчики, создающие ссылки на другие страницы, могут использовать относительный путь, если файл, с которого они ссылаются, находится в том же каталоге. См. наше определение URL-адреса для полного объяснения всех частей, из которых состоит URL-адрес.

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

Создание пути или URL-адреса к файлу с использованием , или любого другого тега может привести к путанице. Создать ссылку на абсолютный путь легко, поскольку вы указываете URL-адрес файла в Интернете. Например, чтобы связать логотип Computer Hope (https://www.computerhope.com/logo.gif), абсолютным путем будет этот URL, как показано ниже.

 < /а> 

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

  1. Файл должен находиться на том же сервере, что и HTML-файл. Итак, если мы ссылались на «logo-200-gray.png», этот файл должен существовать на сервере или локально. Вы также можете заменить имя этого файла любым другим файлом на вашем сервере.
  2. Путь к файлу должен указываться относительно каталога HTML-файла. Итак, если мы хотим связать файл «logo.gif» на этой странице, локальный путь будет «/issues/ch001708.htm», который является каталогом «issues», содержащим эту страницу. Поскольку «logo-200-gray.png» находится в другом каталоге, нам нужно перейти в корневой каталог, а затем в каталог «cdn/media» к файлу.