Что такое относительный путь к файлу

от admin

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

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

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

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

  1. https:// — протокол подключения к сайту — домен
  2. source, img — папки
  3. 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 группе.

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

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

Итак, начнем с определения самого термина «путь»:

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

Википедия

Если говорить о сайтах, то путь — это то же, что и ссылка. Ссылки могут быть абсолютными и относительными. Рассмотрим оба варианта более подробно.

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

Абсолютный адрес ссылки на файл включает в себя протокол (например, http:// ), имя сайта в Сети, подкаталог (или несколько подкаталогов), название файла. Пример того, как выглядит абсолютный URL:

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

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

Что такое относительный путь к файлу

С относительным адресом всё намного интереснее — он может отсчитываться как от корня сайта, так и от текущего документа. Корневой относительный путь — это путь, который указывает на расположение файла относительно корневого каталога сайта. В этом случае адрес не содержит ни протокола, ни имени домена, и начинается со знака слэша / , который указывает на корневую папку. Выглядит этот адрес так:

Как легко определить корневой относительный адрес? Просто возьмите абсолютную ссылку и уберите из нее протокол и название домена, оставив слэш и все символы, которые идут дальше.

Относительный путь к файлу от документа — это путь к файлу относительно текущего документа. Такой адрес зависит от расположения файла, в котором он записан. Так, когда относительная ссылка указывается в та­блице стилей, она рассчитывает путь к файлу, отталкиваясь от таблицы стилей, а не от текущей веб-страницы либо корневой папки. Приведем несколько примеров.

Пример I

Если наша таблица стилей style.css и файл с фоновым рисунком bg.png находятся в одной папке (не обязательно корневой), то относительный путь от таблицы до рисунка будет выглядеть так:

Пример II

Если таблица стилей находится в корне, а рисунок — в папке img , относительная ссылка будет таковой:

Пример III

Если таблица стилей находится в папке, а рисунок соседствует с этой папкой, то относительный путь будет таким:

Пример IV

Если таблица стилей находится в двух папках, а рисунок соседствует с первой папкой, то относительный путь будет следующий:

Две точки и слэш в начале относительного пути означают подъем на один уровень вверх. В зависимости от количества уровней (каталогов), на которые нужно подняться, необходимо прописать нужное количество точек со слэшом. К примеру, если таблица стилей лежит не в двух, а в четырех папках, запись, соответственно, будет следующей:

В том случае, когда рисунок спрятан в папку img , а таблица стилей — в папку css , вам понадобится выйти из папки css и зайти в папку img . Вот так:

Если папок несколько, необходимо также прописать их. Изменим предыдущий пример: представим, что в папке img есть еще одна папка backgrounds , в которой лежит наш рисунок. Относительный путь будет таким:

Какой путь лучше использовать

Абсолютный адрес ссылки понадобится использовать, если файл, на который вы ссылаетесь, находится на другом сайте. В пределах одного сайта абсолютный путь практически не используется (хоть он и будет работать). Это связано с несколькими моментами: во-первых, такие ссылки могут быть весьма громоздкими, а во-вторых, если имя домена изменится, то возникнет проблема — все ссылки будут вести на старый домен, что может повлечь за собой множество ошибок и битых ссылок.

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

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

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

Далее в учебнике: свойство background-repeat — управление повтором фонового изображения.

Лекция 2. Файловый ввод-вывод

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

Если имя файла включает как минимум один знак . , то часть имени от последнего знака . и до конца называется расширением. Как правило, расширение указывает тип содержимого файла: .jpg — картинка в формате JPEG, .txt — текстовый файл, .exe — исполнимый файл ОС Windows, .py — исходный текст на языке Python и т.д.

Часто интерфейс операционной системы скрывает расширения файлов, т.е. файлы с именами input.txt и program.py будут отображаться как input и program . Распространённая ошибка — забыть о том, что расширения скрываются и добавить «лишнее» расширение, создав, например, текстовый файл input.txt.txt — в папке он будет показываться как input.txt , т.к. расширение будет скрыто. Но при этом программа на Python не сможет найти файл input.txt , т.к. реально его в папке нет — есть файл с именем input.txt.txt .

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

Папка (каталог, «директория») — именованная группа файлов. Как правило, файл находится только в одной папке. Некоторые файловые системы позволяют одному файлу находиться в нескольких папках одновременно, но это редкая и специфическая практика.

Папки тоже являются файлами (специального вида) и могут находиться внутри других папок. Если папка A находится внутри папки B , то папка B для папки A считается родительской. Корневая папка (корневой каталог) — папка, у которой нет родительской.

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

У запущенной программы одна из папок файловой системы является текущей — это своего рода неявная глобальная переменная.

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

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

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

Если файл находится в текущей папке, то относительный путь к нему состоит из одного имени файла.

Правила записи пути к файлу зависят от операционной системы.

Особенности путей к файлам на Windows

На Windows компоненты пути разделяются знаками прямой / и обратной \ косой черты. Причём в интерфейсе (командная строка, элементы графического интерфейса) обратная косая черта \ работает всегда, прямая / не всегда (из соображений совместимости по историческим причинам).

Относительный путь к файлу — перечисление имён папок с именем целевого файла в конце, разделителем служат знаки / или \ . Текущих папок на Windows может быть несколько, у каждой буквы диска — своя текущая папка, поэтому относительный путь на Windows может начинаться с буквы диска и двоеточия.

Абсолютный путь к файлу начинается с разделителя папок (т.е. / или \ ), который может предваряться буквой диска. Если буква диска не указана, то подразумевается текущая буква диска.

Первые три примера — файл, который я сейчас пишу, а вы сейчас читаете.

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

(т.к. текущая папка — D:\Mazdaywik\Documents\Преподавание\L4 ).

В именах файлов на Windows запрещены знаки » , \ , / , < , > , : , * , ? . Некоторые имена файлов зарезрвированы — nul , prn , con , com1 , lpt1 , aux и ряд других — нельзя создать файл с этим именем и любым расширением (например, nul.txt , con.jpg , aux.py и т.д.)

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

• Штукатурка.txt • ШТУКАТУРКА.TXT • ШтукаТурка.txt • штукаТУРКА.tXt • ШтУкАтУрКа.TxT

Особенности путей к файлам на unix-подобных ОС (Linux и macOS)

Здесь всё проще. Разделителем компонентов в пути является только знак / . Корень у файловой системы один, букв диска нету. Вместо этого для подключаемых устройств (например, флешек) создаются отдельные папки, внутри которых отображается содержимое устройства.

Примеры путей к файлам:

На Linux в именах файлов допустимы любые знаки, кроме знака / (т.к. он зарезервирован для разделителя путей), в отличие от Windows, зарезервированных имён нет (кроме . — ссылки на текущую папку и .. — ссылка на родительскую).

На Linux имена файлов учитывают регистр символов — большие и маленькие буквы считаются разными. Имена файлов hello.txt и HELLO.TXT — это имена двух разных файлов.

На macOS регистр имён файлов, как и на Windows, не учитывается.

Текстовый файл — файл, хранящий в себе последовательность текстовых строк. Строки в текстовом файле разделяются знаками перевода строки \n . Символы, содержащиеся в строках, представляются байтами или последовательностями байтов при помощи так называемых кодировок — наборов правил представления символов в виде байтов.

Однобайтовые кодировки (вроде Windows-1251 для кириллицы) представляют каждый символ в виде одного байта, поэтому поддерживают только небольшой набор символов (не более 256 включая управляющие символы). Например, кодировка Windows-1251 для кириллицы поддерживает только кириллические и латинские буквы, цифры, набор основных знаков пунктуации и математических знаков.

Многобайтные кодировки (UTF-8, UTF-16, UTF-32, некоторые кодировки для азиатских языков с иероглифами) сопоставляют одному символу несколько байтов, позволяют хранить гораздо больший набор символов. В частности, кодировка UTF-8 представляет все символы стандарта UNICODE, в частности, буквы алфавитов большинства языков (включая иероглифы, деванагари и прочее), разнообразные знаки пунктуации и математические знаки, эмодзи и т.д. В UTF-8 латинские буквы, цифры и основные знаки пунктуации кодируются 1 байтом, кириллические, греческие буквы, иврит и некоторые другие алфавиты — 2 байтами, иероглифы и эмодзи — 3 или 4 байта.

Python поддерживает работу с символами стандарта UNICODE.

Работа с файлами в Python

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

После работы с файлом, его нужно обязательно закрыть — сообщить операционной системе, что мы с ним больше не работаем.

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

На Windows, в частности, если файл открыт в программе, то его нельзя удалить — получим сообщение о том, что файл занят. Если открыт файл на флешке, то Windows не даст эту флешку безопасно извлечь.

Максимально число одновременно открытых файлов ограничено, количество зависит от настроек операционной системы (как-то я делал опыт, на Windows не удалось открыть более 4000 файлов одновременно).

Запись в файлы буферизуется — данные, которые записываются в файл, сначала записываются в область оперативной памяти, т.н. «буфер», когда «буфер» заполняется, выполняется реальна запись на диск. Буфер сбрасывается при закрытии файла.

По этим причинам файл нужно не забывать закрывать.

Открытие файлов

Файл открывается при помощи встроенной функции open() . Синтаксис:

  • Первый параметр (обязательный) — путь к файлу (строка).
  • Второй параметр — режим. Режим может быть
    • r (read) — чтение текстового файла,
    • w (write) — перезапись текстового файла,
    • a (append) — дозапись в конец текстового файла,
    • rb , wb , ab (binary) — чтение, перезапись или дозапись двоичного файла.
    • Если режим файла не указан, то подразумевается r .

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

    Чтение файлов

    Мы будем рассматривать только чтение текстовых файлов.

    Для чтения файлов используются следующие методы:

    • .read(count) — прочитать count символов из файла,
    • .read() — прочитать всё содержимое файла от текущей позиции до конца,
    • .readline() — прочитать очередную строку из файла,
    • .readlines() — прочитать все строки из файла, функция возвращает список строк.

    Строки, которые возвращают .readline() и .readlines() , завершаются символом перевода строки \n . Для того, чтобы эти символы стереть, можно использовать вызов метода .rstrip(‘\n’) , либо вообще .strip() , если нас не интересуют ни начальные, ни конечные пробельные символы.

    Сам объект текстового файла, открытого на чтение, является итератором, который при переборе читает очередную строку (неявно вызывая .readline() ).

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

    Здесь мы не пользуемся методами для чтения файла, мы пользуемся тем, что объект файла является итератором — может быть прочитан в цикле for . Цикл будет перебирать все строки файла, как если бы они были прочитаны при помощи метода .readline() .

    В конце прочитанных строк будет находиться знак перевода строки ( \n ), кроме, возможно, последней — она на знак \n может не завершаться. Поэтому для удаления \n на конце мы используем метод .rstrip(‘\n’) , указывая в качестве параметра удаляемый символ.

    Альтернативное решение — вручную проверять, что если строка заканчивается на \n , то мы её обрезаем, иначе не трогаем. Обрезать последний символ без проверки нельзя, т.к. в последней строке знак перевода может отсутствовать.

    Если знаки \n не обрезать, то на печать будут выводиться лишние пустые строки, т.к. print() при печати строки сам добавляет в конец знак \n .

    Другой, более короткий способ прочитать всё содержимое файла — использовать метод .read() :

    Мы при помощи метода .read() читаем весь файл до конца, всё содержимое файла загружается в оперативную память в виде одной большой строки — эту строку распечатываем при помощи print() . Такое решение нормально работает только с небольшими файлами — файлами, размер которых измеряется не более чем мегабайтами. Для гигабайтных файлов так делать не надо — памяти может не хватить.

    Запись файлов

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

    • Режим перезаписи файла — ‘w’ (от слова write). Если файл не существовал, то он при открытии будет создан и его размер будет равен нулю. Если файл уже существовал, то он будет перезаписан — всё его содержимое сотрётся, его размер станет равным 0 байт.
    • Режим дозаписи в файл — ‘a’ (от слова append). Если файл не существовал, он будет создан и будет иметь размер 0 байт. Если файл уже существовал, то данные в нём останутся как есть, новая запись будет осуществляться в конец файла.

    После этих манипуляций в файле example.txt будет записано только слово

    т.к. мы открывали файл для перезаписи. После первого «сеанса» работы с файлом (вызовы open() , .write() и .close() ) в файле оказалось слово Один! . Когда мы открыли файл второй раз для перезаписи (в режиме ‘w’ ), всё содержимое файла стёрлось, и вместо него мы записали слово Два! .

    Если мы файл удалим, а затем сделаем тоже самое, используя уже режим ‘a’ (дозапись):

    то в файле example.txt у нас окажется

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

    Метод .write()

    Метод .write(s) принимает в качестве параметра строку и записывает её в файл. Возвращаемое значение — количество записанных символов. Обычно возвращаемое значение совпадает с длиной строки. Редко, если на диске закончилось доступное место, строка может записана не полностью и возвращаемое значение будет меньше длины. Обычно об этом не задумываются и возвращаемое значение не анализируют.

    Нужно помнить, что метод .write() при записи строки в файл не добавляет в конце знак перевода строки ‘\n’ . Если формировать файл при помощи метода .write() , переводы строк нужно добавлять явно.

    Функция print()

    С функцией print() мы уже знакомы, мы ею пользовались для вывода данных на консоль. Однако, её можно использовать и для записи в файл.

    Расширенный синтаксис функции print() :

    Функция print() , помимо списка значений для записи, принимает несколько необязательных параметров. Это параметры:

    • sep=‹разделитель полей› — строка, которая разделяет выводимые значения, по умолчанию — один пробел ‘ ‘ .
    • end=‹разделитель строк› — строка, которая завершает вывод строки, по умолчанию — перевод строки ‘\n’ .
    • file=‹объект файла› — открытый для записи (дозаписи или перезаписи) файл или устройство вывода, по умолчанию — вывод на консоль sys.stdout .

    Таким образом, функция print() выводит значения, разделяя их пробелом, в конце выводимой строки печатает перевод строки, вывод осуществляется в консоль (т.е. на экран). Однако, это поведение можно изменить, указывая необязательные параметры.

    Вывод по умолчанию:

    Сделаем разделителем другие строки:

    Выведем две строки, используя в качестве разделителя ‘!’ — перевод на новую строку осуществлён не будет:

    В качестве разделителя полей укажем вместо пробела по умолчанию перевод строки — каждое значение будет распечатано на новой строчке.

    Пример записи в файл при помощи функции print() :

    Функция print() сначала напечатала строчку, потом шесть чисел, разделяя их пробелами (по умолчанию), затем шесть чисел, разделяя их запятой (явно указан sep=’,’ ). Содержимое файла:

    Использование функции print() для вывода в файл удобнее, чем метод .write() .

    Важность закрытия файлов, оператор with

    Для примера создадим файл, запишем в него строку и пока не закроем:

    Файл в папке появился, но он почему-то пустой. Размер отображается как 0 байт, если откроем блокнотом, то увидим пустой файл.

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

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

    После закрытия файла его размер уже не нулевой, и если откроем его блокнотом, то увидим ожидаемое содержимое — строку

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

    Другая причина закрытия файлов — на Windows открытые файлы блокируются операционной системой. Если мы откроем файл и попробуем его удалить:

    то удалить его не удастся:

    remove-error.png

    Если файл закрыть, то он успешно удалится:

    На Linux и macOS удалять открытые файлы можно.

    Третья причина — нельзя одновременно открыть очень много файлов. Для примера напишем функцию:

    Эта функция открывает для записи указанное количество файлов, имена файлов при этом имеют вид file0.txt , file1.txt , …, функция возвращает список открытых файлов.

    При попытке открыть 10 тысяч файлов получим следующее сообщение об ошибке:

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

    Python часто «прощает» незакрытые файлы — он их может закрыть сам. Но лучше на это не полагаться. Не забывать каждый раз вызывать метод .close() довольно утомительно, поэтому разработчики Python предусмотрели синтаксис, гарантирующий обязательное закрытие файла:

    Здесь ‹параметры› — параметры функции open() : имя файла, режим, кодировка, ‹перем› — имя переменной, которой будет присвоен отрытый файл, ‹блок кода› — некоторый блок кода. Семантика этой конструкции следующая.

    • Открывается файл,
    • объект файла присваивается переменной ‹перем› ,
    • выполняется ‹блок кода› .
    • При завершении выполнения блока кода, причём любым способом — при достижении его конца, либо завершение функции при помощи return , либо, если конструкция with находится внутри цикла, то при прерывании итерации при помощи break или continue , либо при генерации исключения (возникновении ошибки) файл, присвоенный переменной ‹перем› обязательно автоматически закроется.

    Пример. Подсчитаем число строк в файле.

    Функция count_lines(filename) принимает имя файла и возвращает число строк в нём. Для открытия файла используется конструкция with , которая присваивает открытый функцией open() файл в переменную f . Чтобы подсчитать строки в файле, мы считываем все строки при помощи метода .readlines() и возвращаем длину полученного списка. Заметим, что блок кода, управляемый with , завершается при помощи return . Однако, файл будет закрыт, т.к. with это гарантирует.

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

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

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

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

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

    Оглавление

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

    Когда ссылка представляет из себя полный URL файла или страницы, это и есть абсолютный путь. При этом в адресе должен присутствовать используемый протокол. Например, https://www.uamedwed.com – это абсолютный путь к конкретному веб-сайту. В данном случае абсолютный путь к главной странице моего блога. Где протоколом является http, а www.uamedwed.com доменом(именем).

    Если указывать ссылку на католог, например http://yourdomain.ua/web/ то будет загружаться(отображаться) индексный файл. Это правило применимо в основном к статическим сайтам. Так как при использовании языка программирования можно создать внутренний роутинг. Индексный файл обычно представляет из себя файл с именем index.php, index.html, index.phtml, index.shtml. Для того что бы использовать другой индексный файл, нужно создать в нужной директории файл с именем .htaccess, и в нем прописать некоторую директиву. Изменение и создание файла .htaccess, как и роутинг с помощью языка программирования, выходит за рамки этой статьи.

    В основном абсолютный путь используется, тогда, когда нужно сослаться на другой сайт. Иными словами если Вы хотите отправить посетителя на другой сайт, то нужно использовать абсолютный путь. Хотя, такой путь можно использовать и на собственном сайте. Но многие придерживаются того, что ссылки внутри сайта должны быть относительными.
    Использование абсолютного пути может повлечь за собой некоторые проблемы. Например при переносе сайта с локальной машины на сервер(это в том случае, если вы использовали на локальной машине адреса в виде http://localhost/sitename.ua/…). Трудности могут возникнуть, тогда, когда появится необходимость в смене домена(имени сайта). Хотя, все эти трудности решаемы, но на них придётся потратить некоторое количество времени.
    Когда есть минусы, значит должны быть и плюсы. Возьмём к примеру такую ситуацию, как кража контента с вашего сайта. На практике я уже не раз убедился в том, что текст воруют целиком, при этом не оставляя обратной ссылки на оригинал. Так вот, при использовании абсолютных путей, можно получить обратные ссылки с сайта, на котором находится сворованный контент. Но это только в том случае если у Вас внутренняя перелинковка осуществлялась с использованием абсолютных путей. Хотя это не всегда работает, но я уже не раз замечал появление ссылок с чужих сайтов, на которых был расположен мой контент.

    Немного отступив от темы хочу вкратце рассказать про то что такое URL.

    Каждая веб-страница или документ в сети Интернет имеет собственный уникальный адрес, который и называется URL.
    URL – единообразный локатор (определитель местонахождения) ресурса. Расшифровывается URL как Uniform Resource Locator(унифицированный адрес ресурса). Можно так же встретить и такую расшифровку как Universal Resource Locator(универсальный локатор ресурса). Этот способ записи адреса стандартизирован в сети Интернет. Более общая и широкая система идентификации ресурсов URI постепенно заменяет термин URL.
    URI — это символьная строка, которая идентифицирует какой-либо ресурс: документ, файл, и т.д. Конечно, здесь подразумеваются ресурсы сети Интернет.

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

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

    Путь относительно документа

    Именно путь относительно документа используется чаще всего. Такие ссылки ещё называются локальными. В основном такой путь используется тогда, когда текущий и связанный документ(страница) находятся в одной директории. Если переместить документ в другую директорию, то путь(ссылку) придётся менять. Хотя можно ссылаться и на документы(страницы) из других директорий. Для этого путь прописывается от текущего документа до целевого документа(страницы). При этом путь относительно документа должен задаваться в зависимости от структуры директорий.
    Возьмём к примеру простейшую структуру статического сайта.

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

    Предположим, что каждое изображение в каталоге images нужно вставить в соответствующие страницы home.html, products.html, contact.html. Для того что бы вставить изображение к примеру на страницу “home.html”, нужно прописать путь, где расположено изображение. Если использовать путь относительно документа, то нужно будет прописать в коде страницы следующее:

    Этот код для вставки изображения на страницу – неполный. Так как он не содержит нескольких важных атрибутов, таких как ширина, высота и др. Атрибут src, здесь служит для указания пути к файлу. Здесь опущены все остальные атрибуты, так как они сейчас не столь важны. Главное сейчас, что бы Вы имели представление о том, как выглядит путь относительно документа.
    При использовании путей относительно документа отсутствует часть абсолютного пути. Часть абсолютного пути, здесь усекается, как для текущего документа(страницы), так и для связанного. Здесь используется только та часть пути, которая всегда меняется.
    Напомню ещё раз про то, что при использовании пути относительно документа, нужно учитывать исходное расположение файлов.

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

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

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

    Как видно из приведённого выше кода, к пути теперь добавилось следующее: ../. Как раз эта последовательность символов ../ и служит для перехода на одну директорию(уровень) выше в иерархии каталогов. Путь в вышеприведённом коде можно прочесть так: “Перейти на один каталог выше(назад), зайти в директорию images и взять от туда файл products.png“.
    Если ../ означает переход на одну директорию(уровень) выше в иерархии каталогов, то символ / обозначает переход на один уровень ниже.
    Последовательность символов ../ можно использовать в пути неоднократно. Например, если файл products.html переместить в три директории вложенные в друг друга, то нужно будет использовать следующий код:

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

    Путь относительно корня сайта

    Вы наверное уже поняли что пути относительно документа используются очень часто. Но при их использовании существует одна проблема. Которая заключается в том, что при смене структуры директорий, пути придется менять.
    Но такая проблема решаема при использовании путей относительно корня сайта. Где путь указывается от корневой директории до документа.
    Все пути относительно корня сайта начинаются со знака /. Только здесь, в отличии от путей относительно документа этот знак используется для указания корневой директории. Потому, что он используется в начале пути.
    Путь относительно корня сайта позволяет перемещать некоторые файлы, без ущерба для ссылок. Этот тип пути Вы сможете использовать только на web-сервере в интернете, или на web-сервере расположенном на локальной машине.

    В качестве web-сервера на локальной машине может выступать – XAMPP. Который позволит у себя на компьютере создать среду для созданию сайтов и их предварительного тестирования.

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

    Например, /images/products.png обозначает, что файл products.png находится в папке images, которая расположена в корневом каталоге.

    Самый простой способ определить корневой относительный путь – взять абсолютный и отбросить http:// и имя хоста.

    Пример
    Иногда бывает нужно, что бы информацию одной страницы использовали другие страницы сайта. Часто это делается для того что бы сократить количество повторяемого кода на каждой странице. Допустим есть файл _contact.html, который содержит информацию о телефонных номерах, e-mail и содержит изображение contact.png. (Пускай это будет небольшая таблица, которая будет располагаться на каждой странице сайта.)

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

    Следующий код предназначен для вставки изображения “contact.png”.

    Код, который необходим для вставки одного файла в другой, выходит за рамки этой статьи. Здесь все зависит от используемого языка программирования.

    Я надеюсь, что Вы уже знаете какой тип пути использовался в вышеприведённом коде. Если нет, тогда посмотрите приведённое выше определение пути относительно документа.
    Теперь, когда посетитель зайдет на такие страницы сайта как home.html, contact.ntml, он увидит прекрасно отображаемую страницу. В каждую из которых вставлен файл _contact.html, в который, в свою очередь, вставлено изображение contact.png.
    Другими словами зайдя, к примеру, на страницу home.html, происходит следующее: “Выполняется код основной страницы home.html. Затем вставляется и исполняется код страницы _contact.html. Код страницы _contact.html, говорит что нужно перейти в директорию images и взять от туда изображение contact.png“.
    Если опустить сам код для вставки, то все работает отлично. Но вот если запустить страницу products.html, то произойдет ошибка. Так как код будет пытаться найти директорию images и файл contact.png в директории products. Но такой директории там не существует, из за чего собственно и возникает проблема.
    Становится ясным, что использовать путь относительно документа здесь нельзя.
    Конечно здесь можно использовать абсолютный путь. О плюсах и минусах данного подхода я говорил выше.
    В общем говоря, это одна из ситуаций, когда нужно использовать путь относительно корня сайта. При использовании пути относительно корня сайта, ссылка будет всегда начинаться с корневого каталога(корня сайта). Такой тип пути позволит использовать код для вставки, например изображения, независимо от иерархии сайта, и его директорий.
    Использование пути относительно корня сайта в вышеприведённом примере, позволит избежать проблем, со вставкой изображения. Потому как независимо от того где будет использовать такой тип пути, он всегда найдет указанный в нем файл.
    Путь относительно корня сайта, очень похож на путь относительно документа. Для того что бы создать путь относительно корня сайта, нужно добавить символ / в начало пути.

    Теперь изображение будет корректно вставляться на любой из страниц сайта.

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

    Читать:
    Software download microsoft com чей сайт

Похожие статьи