Программирование на Python и Objective-C в Mac OS

Программирование на Python и Objective-C под Mac OS и для iPhone / iPod Touch

Dirname file: PHP: dirname — Manual

Содержание

Использование команды Dirname в Linux в скриптах Bash

Команда dirname в Linux печатает путь к файлу с удаленным последним компонентом. Это в основном дает вам путь к каталогу из пути к файлу.

destroyer@andreyex: ~$ dirname /home/andreyex/upload/andreyex.jpg
/home/andreyex/upload
destroyer@andreyex: ~$

 

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

Команда dirname дополняет команду basename. Команда basename извлекает имя файла из пути, в то время как dirname извлекает путь к каталогу.

 

Примеры команды Dirname

Команда dirname имеет простой синтаксис.

dirname OPTION PATH

 

Использование команды dirname с абсолютным путем к файлу даст путь к каталогу:

dirname /home/user/data/filename.txt
/home/user/data

 

Как и команда basename, команда dirname на самом деле примитивна. Она действительно не распознает путь к файлу. А просто ищет косые черты (/) и печатает все, что есть до последней косой черты. По сути, вы можете задать ему любую строку с / в ней, и она будет работать с ней.

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

destroyer@andreyex: ~$ dirname dir1/dir2/dir3/dir4
dir1/dir2/dir3
destroyer@andreyex: ~$

 

Если в пути нет косой черты (/), будет выведена точка (.), Означающая текущий каталог.

destroyer@andreyex: ~$ dirname andreyex.txt
.
destroyer@andreyex: ~$

 

Вы также можете использовать dirname с несколькими путями. Он вернет вывод для каждого пути в новой строке:

destroyer@andreyex: ~$ dirname dir1/file dir2/file
dir1
dir2
destroyer@andreyex: ~$

 

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

 

Использование dirname в скрипте bash

Мы показали несколько примеров команды dirname. Давайте поговорим об использовании dirname в скриптах bash.

Предположим, у вас есть переменная пути к файлу, и вы хотите получить путь к каталогу, в котором находится файл. Это может быть простой скрипт:

pathname="/home/dir/data/filename"
result=$(dirname "$pathname")
echo $result

 

Как мы упоминали ранее, команда dirname дополняется командой basename. В отличие от dirname, команда basename печатает только последний компонент пути.

Мы надеемся, вам понравилась эта статья. Как всегда, не стесняйтесь задавать вопросы или давать предложения в разделе комментариев.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

python — os.path.dirname (__ file__) возвращает пустое

Я хочу получить путь к текущему каталогу, в котором выполняется файл .py.

Например, простой файл D:\test.py с кодом:

import os

print os.getcwd()
print os.path.basename(__file__)
print os.path.abspath(__file__)
print os.path.dirname(__file__)

Странно, что вывод:

D:\
test.py
D:\test.py
EMPTY

Я ожидаю таких же результатов от getcwd() и path.dirname().

Учитывая os.path.abspath = os.path.dirname + os.path.basename, почему

os.path.dirname(__file__)

Возвращается пустой?

170

Flake

16 Окт 2011 в 13:03

5 ответов

Лучший ответ

Потому что os.path.abspath = os.path.dirname + os.path.basename не имеет места. у нас скорее есть

os.path.dirname(filename) + os.path.basename(filename) == filename

И dirname(), и basename() только разбивают переданное имя файла на компоненты без учета текущего каталога. Если вы хотите также рассмотреть текущий каталог, вы должны сделать это явно.

Чтобы получить имя абсолютного пути, используйте

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

243

Sven Marnach
16 Окт 2011 в 22:42

os.path.split(os.path.realpath(__file__))[0]

os.path.realpath(__file__) возвращает абатс текущего скрипта; os.path.split (abspath) [0] возвращает текущий каталог

5

RY Zheng
3 Фев 2015 в 03:46

print(os.path.join(os.path.dirname(__file__))) 

Вы также можете использовать этот путь

5

Mikhail
24 Мар 2013 в 13:22

Можно использовать также так:

dirname(dirname(abspath(__file__)))

9

Exelian
22 Ноя 2013 в 11:56

import os.path

dirname = os.path.dirname(__file__) or '.'

5

Community
6 Дек 2016 в 15:03

linux — Linux переименовывает файлы как dirname

У меня много таких файлов:

./1/wwuhw.mp3
./2/nweiewe.mp3
./3/iwqjoiw.mp3
./4/ncionw.MP3
./5/joiwqfm.wmv
./6/jqoifiew.WMV

Как я могу переименовать их вот так в Linux Bash:

./1/1.mp3
./2/2.mp3
./3/3.mp3
./4/4.MP3
./5/5.wmv
./6/6.WMV

-1

Leesy

11 Апр 2016 в 05:46

4 ответа

Лучший ответ

Попробуй это,

for i in */*; do mv $i $(dirname $i)/$(dirname $i).${i##*.}; done

Цикл For перебирает каждый файл в каталоге один за другим. и оператор mv переименовывает каждый файл в каталоге один за другим.

0

mf_starboi_8041
11 Апр 2016 в 05:39

Метод цикла for, как указано в некоторых других ответах, будет достаточным и отлично работает в большинстве случаев, когда вам нужно переименовать каждый файл в каталоге в имя первого родительского каталога. В моем конкретном случае требовалось немного большей детализации, когда я хотел только переименовать подмножество файлов в каталоге и утверждать, что операнд на самом деле был реальным файлом , а не пустой каталог, символическая ссылка и т. д. Использование find позволяет добиться именно того, что вы хотите, в дополнение к добавленной способности применять фильтрацию и обработку к входным и выходным файлам.

#####################################
# Same effect as using a `for` loop #
#####################################
#
#   -mindepth 2 : ensures that the file has a parent directory.
#   -type f : ensures that we are working with a `regular file` (not directory, symlink, etc.).

find . -mindepth 2 -type f -exec bash -c 'file="{}"; dir="$(dirname $file)"; mv "$file" "$dir/${dir##*/}.${file##*.}"' \;

#########################
# Additional filtration # 
#########################

# mp3 ONLY (case insensitive) 
find . -mindepth 2 -type f -iname "*.mp3" -exec bash -c 'file="{}"; dir="$(dirname $file)"; mv "$file" "$dir/${dir##*/}.${file##*.}"' \;

# mp3 OR mp4 ONLY (case insensitive)
find . -mindepth 2 -type f \( -iname "*.mp3" -or -iname "*.mp4" \) -exec bash -c 'file="{}"; "dir=$(dirname $file)"; mv "$file" "$dir/${dir##*/}.${file##*.}"' \;

0

Travis Clarke
27 Апр 2017 в 19:17

Если вы не против использования внешнего инструмента, то rnm может сделать это довольно легко:

rnm -ns '/pd0/./e/' */*

/pd0/ — непосредственный родительский каталог, /pd1/ — предшествующий ему каталог и так далее.

-ns означает строку имени , а /pd/ и /e/ правила строки имени , которые расширяются до родительского каталога и расширение файла соответственно.

Общий формат правила /pd//pd<digit>-<digit>-<delim>/, например, такое правило, как /pd0-2-_/, будет создавать dir0_dir1_dir2 из структуры каталогов dir2/dir1/dir0

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

0

Jahid
7 Май 2016 в 10:32

Что-то вроде этого должно сработать:

for i in */*; do
    echo mv "${i}" "${i%/*}/${i%/*}.${i##*.}"
done

См. Например здесь, что означают эти загадочные расширения параметров (например, ${i%/*}) в bash.

Приведенный выше сценарий будет печатать команды только в консоли, не вызывая их. Убедившись, что вы хотите продолжить, можно удалить оператор echo и дать ему возможность работать.

0

pfnuesel
11 Апр 2016 в 03:04

FILE_DIRNAME

FILE_DIRNAME

Функция FILE_DIRNAME возвращает имя каталога из пути к файлу . Путь к файлу — это строка, содержащая один или несколько сегментов, состоящих из имен, разделенных символами-разделителями каталогов (косая черта (/) в UNIX или обратная косая черта (\) в Microsoft Windows). Имя каталога — это весь путь к файлу, за исключением последнего крайнего правого сегмента, который обычно является именем файла, но также может быть именем каталога.

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

FILE_DIRNAME основан на стандартной утилите Unix dirname (1).

Примечание: Чтобы получить крайнюю правую часть пути к файлу (базовое имя ), используйте функцию FILE_BASENAME.

Примеры


Следующие операторы распечатывают каталог, в котором IDL находит файл dist.pro, когда ему требуется определение функции DIST.(DIST является частью стандартной пользовательской библиотеки IDL, включенной в IDL):

 temp = DIST (4) PRINT, FILE_DIRNAME ((ROUTINE_INFO ('DIST', $ 
/ FUNCTION, /SOURCE)).path)

В зависимости от платформы и местоположения, где установлен IDL, IDL печатает что-то вроде:

 / USR / местные / Харрис / idl / lib 

Синтаксис


Результат = FILE_DIRNAME ( Путь [, / MARK_DIRECTORY])

Возвращаемое значение


Скалярная строка или массив строк, содержащий имя каталога для каждого элемента аргумента Path .

Примечание: По умолчанию имя каталога не включает последний символ разделителя каталогов; это поведение можно изменить с помощью ключевого слова MARK_DIRECTORY.

Примечание: На платформах Windows в строке, возвращаемой FILE_DIRNAME, всегда используется обратная косая черта (\) в качестве символа разделителя каталогов, даже если косая черта (/) использовалась в аргументе Путь .

Аргументы


Путь

Скалярная строка или массив строк, содержащий пути, для которых требуется имя каталога.

Примечание. В Microsoft Windows символ обратной косой черты ( \ ) используется для разделения каталогов в пути. Для совместимости с UNIX и общего удобства символ прямой косой черты (/) также принимается в качестве разделителя каталогов в аргументе Path . Однако все результаты , созданные FILE_DIRNAME на платформах Windows, используют для этой цели стандартную обратную косую черту, независимо от символа разделителя, используемого во входном аргументе Path .

Ключевые слова


MARK_DIRECTORY

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

Правила, используемые FILE_DIRNAME


FILE_DIRNAME создает копию строки входного пути, а затем изменяет копию в соответствии со следующими правилами:

  • Если Путь — пустая строка, тогда FILE_DIRNAME возвращает одну точку (.) символ, представляющий текущий рабочий каталог процесса IDL.
  • В Microsoft Windows путь к файлу может начинаться с одного из следующих символов:
  • Буква диска и двоеточие (для путей к файлам в формате c: \ directory \ file).
  • Начальная двойная обратная косая черта и имя хоста (для путей к файлам UNC в форме \\ host \ share \ directory \ file).

Если любой из них присутствует в Путь , они считаются частью имени каталога и копируются в результат без интерпретации оставшимися шагами ниже .

  • Если Путь полностью состоит из символов разделителей каталогов, результатом FILE_DIRNAME будет одиночный символ разделителя каталогов (с префиксом диска Windows и двоеточием или префиксом UNC, если необходимо).
  • Удаляются все символы справа от самого правого символа разделителя каталогов.
  • Удаляются все завершающие символы разделителей каталогов.
  • Если задано ключевое слово MARK_DIRECTORY, в конец добавляется один символ разделителя каталогов.

История версий


См. Также


FILE_BASENAME, PATH_SEP, STREGEX, STRMID, STRPOS, STRSPLIT, общий доступ к файлам

basename: Управление путями к файлам

Описание

использование

Аргументы

Подробности

Стоимость

Поведение в Windows

Примечание

Смотрите также

Примеры

basename удаляет весь путь до последнего включительно
разделитель путей (если есть).

dirname возвращает часть пути от до, но
исключая последний разделитель пути, или "." если нет пути
разделитель.

путь

векторных символов, содержащих имена путей.

Расширение пути тильдой выполняется за исключением Windows.

Конечные разделители пути удаляются перед рассечением пути,
а для dirname удаляются завершающие разделители файлов
от результата.

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

Пути, не содержащие разделителей, считаются находящимися в текущем
каталог, поэтому dirname возвращает "." .

Если элемент пути равен NA , результат будет таким же.

"" не является допустимым путем, но возвращается без изменений.

В Windows это будет принимать либо \ , либо / в качестве пути
разделитель, но dirname вернет путь с использованием /
(кроме случая в сетевой папке, когда ведущие \ будут
сохранились).Ожидайте, что они смогут справиться только с полным
пути, а не, например, просто общий сетевой ресурс или диск.

Можно использовать имена путей в кодировке UTF-8, недопустимые в текущей локали.

Это не оболочки для системных функций POSIX того же
имена: в частности, у них , а не , имеют специальную обработку
путь "/" и возврат "." для пустых строк.

путь к файлу , путь развернуть .

 ((«», «p1», «p2», «p3», («файл1», «файл2»)))
((«», «p1», «p2», «p3», «имя файла»))
 

Путь — APIdock

Путь представляет собой имя файла или
каталог в файловой системе, но не сам файл.

Путь зависит от операционной системы: Unix, Windows и т. Д.
библиотека работает с путями к локальной ОС, однако пути, не относящиеся к Unix
поддерживается экспериментально.

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

Путь неизменен. У него нет метода для
деструктивное обновление.

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

Все функции из File, FileTest и некоторые из Dir и FileUtils
включены, что неудивительно. По сути, это фасад для всех
эти и многое другое.

Примеры

Пример 1: Использование имени пути

 требуется 'путь'
pn = Pathname.new ("/ usr / bin / ruby")
size = pn.size
isdir = pn.directory?
dir = pn.dirname
base = pn.basename
dir, base = pn.split
data = pn.read
pn.open {| f | _}
pn.each_line {| line | _}
 

Пример 2: Использование стандартного Ruby

 pn = "/ usr / bin / ruby"
size = File.size (pn)
isdir = File.directory?(pn)
dir = File.dirname (pn)
base = Файл.базовое имя (pn)
dir, base = File.split (pn)
data = File.read (pn)
File.open (pn) {| f | _}
File.foreach (pn) {| строка | _}
 

Пример 3: Особенности

 p1 = Pathname.new ("/ usr / lib")
p2 = p1 + "рубин / 1,8"
p3 = p1.parent
p4 = p2.relative_path_from (p3)
pwd = Pathname.pwd
pwd.absolute?
p5 = Pathname.new "."
p5 = p5 + "музыка /../ статьи"
p5.cleanpath
p5.realpath
p5.дети
 

Нарушение функциональности

Основные методы

Эти методы эффективно управляют строкой, потому что это все пути. Ни один из
они обращаются к файловой системе, кроме #mountpoint ?, #children,
#each_child, #realdirpath и #realpath.

Методы предиката статуса файла

Эти методы являются фасадом для FileTest:

Свойство файла и методы управления

Эти методы являются фасадом для File:

Методы каталога

Эти методы являются фасадом для Dir:

IO

Эти методы являются фасадом для IO:

Утилиты

Эти методы представляют собой смесь Find, FileUtils и других:

Документация по методу

Как показано в предыдущем разделе, большинство методов в Pathname являются фасадными.Документация для
эти методы обычно просто говорят, например, «Видите FileTest.writable?», как вы должны быть знакомы
в любом случае с исходным методом и его документацией (например, через
ri) будет содержать больше информации. В некоторых случаях краткое
описание будет следовать.

__DIR__ vs dirname (__FILE__) || Аарон Джорбин

Вызов константы всегда должен быть быстрее, чем вызов функции, верно? PHP содержит два разных способа получить каталог, в котором в данный момент находится файл. __DIR__ — это магическая константа, добавленная в PHP в версии 5.3. В официальной документации PHP прямо говорится: «Это эквивалентно dirname (__ FILE__) ». Однако эквивалентность в свою очередь не обязательно означает эквивалентную производительность, поэтому я решил проверить производительность обоих по паре переменных.

Методика тестирования

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

  1. Генератор файлов, который создает код, на котором я и буду запускать тест производительности.
  2. Сценарий выполнения теста, который запускает фактические тесты.
  3. Файл travis.yml для определения моей матрицы тестов
  4. Файлы, используемые для фактического теста. Это не связано, есть 400 000 файлов. Генератор их показывает.

Мой тест вызывает функцию, которую я ищу по 100 000 каждая. В одном прогоне все файлы находятся в 1 каталоге, а в другом — по одному файлу в каталоге.Я хотел исключить возможность того, что один каталог может повлиять на этот вызов.

Я провел этот тест на шести версиях PHP: 5.6.40, 7.0.33, 7.1.27, 7.2.15, 7.3.9 и 7.4-dev. Каждый тест выполнял 650 запусков, и я смотрел пользовательского времени для каждого из этих запусков. Это означает, что я вызвал как __dir__ , так и dirname (__file__) 130 000 000 раз каждый. Затем я взял время для каждого из этих прогонов и посмотрел на этот максимальный (самый медленный) прогон для каждого и 95% времени (среднее между 618-м и 619-м самым медленным), чтобы исключить любые крайние случаи.В целом результаты между максимальным и 95% аналогичны.

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

Переполнение стека

__DIR__ vs dirname (__FILE__) Результаты теста

95% производительность

папок)

В целом результаты показывают, что __dir__ обычно быстрее, но редко намного быстрее. Учтите, что при самом медленном запуске (с использованием PHP 7.2 и вызовом dirname (__FILE__) для нескольких папок) каждый вызов занимал 0,0000329 секунд. Самый быстрый бег был на 2 стотысячных секунды быстрее.Это такая микрооптимизация, что, за исключением экстремальных масштабов, вы вряд ли когда-нибудь заметите разницу. Тем не менее, в большинстве версий PHP __DIR__ работает быстрее.

Итак:

__dir__ или dirname ?

В конце концов, производительность __DIR__ немного лучше, но, что более важно, я думаю, что он более понятен и легче читается. Итак, я в команде __dir__ , но производительность — это только бонус.

Если у вас есть другие мысли или вы думаете, что мою методологию тестирования можно улучшить, сообщите мне об этом в комментариях ниже.

Получение абсолютного каталога файла в Linux

Мы начинаем новую область Linux. Если у вас есть несколько лет опыта работы в экосистеме Linux, и вы заинтересованы в том, чтобы поделиться этим опытом с сообществом (и, конечно же, получать деньги за свою работу), загляните на страницу «Напишите для нас».
Ура, Евгений

1.Введение

В этом руководстве мы увидим, как получить абсолютный каталог данного файла с помощью двух распространенных инструментов файловой системы Linux.

2. Предпосылки

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

2.1.

ссылка для чтения

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

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

  /
└── домой /
    └── пример /
        ├── foo /
        | └── file.txt
        └── ссылка -> foo /  

Мы используем флаг -f , чтобы канонизировать путь относительного пути или символической ссылки. Следовательно, если мы изменим каталог на / home / example / , мы сможем выполнить любую из следующих команд:

  ссылка для чтения -f foo / file.текст
readlink -f ссылка / file.txt
readlink -f ./foo/file.txt
readlink -f ../example/foo/file.txt  

Эти команды выведут:

  /home/example/foo/file.txt  

В случае первой команды readlink разрешает относительный путь foo / к абсолютному пути / home / example / foo / .

Во втором случае readlink разрешает символическую ссылку link / на тот же абсолютный путь.

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

Обратите внимание, что флаг -f требует, чтобы все компоненты, кроме последнего в предоставленном пути — file.txt в нашем случае — существовали . Если путь не существует, выходные данные не возвращаются. Например, выполнение readlink -f bar / file.txt не приведет к выводу, поскольку каталог bar / не существует.Напротив, выполнение readlink -f foo / other.txt вернет /home/example/foo/other.txt , поскольку все компоненты, кроме последнего, существуют.

Вместо этого мы можем использовать флаг -m , если нам все равно, существует ли какой-либо из компонентов в предоставленном пути. Точно так же мы можем использовать флаг -e , если мы хотим, чтобы все компоненты в предоставленном пути существовали.

2.2.

имя каталога

Второе предварительное условие — это команда dirname , которая печатает каталог, содержащий предоставленный путь .

Если мы указываем каталог, dirname выводит путь, содержащий этот каталог. Например, мы можем выполнить:

  имя каталога / home / example / foo /  

Это произведет:

  / home / example  

Обратите внимание, что dirname печатает абсолютный каталог, потому что мы указали абсолютный путь. Если мы изменили каталог на / home / и выполнили dirname example / foo / , dirname выдали бы example .Как правило, , если указан относительный путь, dirname выводит относительный каталог, а если указан абсолютный путь, dirname выводит абсолютный каталог .

При предоставлении файла dirname выводит путь, содержащий этот файл. Например, мы можем выполнить:

  имя каталога foo / file.txt  

Это произведет:

  foo  

3. Абсолютный каталог файла

Чтобы получить абсолютный каталог файла, мы объединяем команды readlink и dirname .Мы можем сделать это одним из двух способов.

3.1.

xargs

Во-первых, мы можем использовать команду xargs , которая преобразует ввод в аргументы для предоставленной команды. Отправив вывод из readlink в xargs и предоставив команду dirname в качестве аргумента для xargs , мы можем получить этот желаемый абсолютный каталог:

  ссылка для чтения -f foo / file.txt | xargs dirname  

Результат:

  / home / example / foo  

3.2. Подстановка команды

Точно так же мы можем использовать подстановку команды — $ (команда) — где команда выполняется во вспомогательной оболочке, а вывод этой команды заменяет ее вызов. Следовательно, мы можем выполнить следующее:

  имя каталога $ (ссылка для чтения -f foo / file.txt)  

Результат этой команды:

  / home / example / foo  

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

  имя каталога `readlink -f foo / file.txt`  

Обратите внимание, что подстановка команд работает с bash, но не обязательно работает с другими оболочками.

4. Заключение

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

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

os.path — Общие манипуляции с именами путей — документация Python 3.9.6

Исходный код: Lib / posixpath.py (для POSIX) и
Lib / ntpath.py (для Windows NT).


Этот модуль реализует некоторые полезные функции для имен путей. Читать или
для записи файлов см. open () , а для доступа к файловой системе см.
os модуль. Параметры пути могут быть переданы как строки,
или байты. Приложениям рекомендуется представлять имена файлов как
Строки символов (Unicode).К сожалению, некоторые имена файлов могут не совпадать.
представлены в виде строк в Unix, поэтому приложения, которые должны поддерживать
произвольные имена файлов в Unix должны использовать байтовые объекты для представления
имена путей. И наоборот, использование байтовых объектов не может представлять весь файл.
имена в Windows (в стандартной кодировке mbcs ), следовательно, Windows
приложения должны использовать строковые объекты для доступа ко всем файлам.

В отличие от оболочки unix, Python не выполняет автоматических расширений пути .
Могут быть вызваны такие функции, как expanduser () и expandvars ()
явно, когда приложение требует расширения пути в виде оболочки.(Смотрите также
модуль glob .)

См. Также

Модуль pathlib предлагает высокоуровневые объекты пути.

Примечание

Все эти функции принимают либо только байты, либо только строковые объекты как
их параметры. Результатом является объект того же типа, если путь или
возвращается имя файла.

Примечание

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

os.path. abspath ( путь )

Вернуть нормализованную абсолютизированную версию имени пути путь .На большинстве
платформ, это эквивалентно вызову функции normpath () как
следует: normpath (join (os.getcwd (), path)) .

os.path. базовое имя ( путь )

Вернуть базовое имя пути путь . Это второй элемент
пара, возвращенная передачей пути функции split () . Обратите внимание, что
результат этой функции другой
из программы Unix basename ; где базовое имя для
'/ foo / bar /' возвращает 'bar' , функция basename () возвращает
пустая строка ( '' ).

os.path. общий путь ( путей )

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

Доступность: Unix, Windows.

os.path. общий префикс ( список )

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

Примечание

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

 >>> os.path.commonprefix (['/ usr / lib', '/ usr / local / lib'])
'/ usr / l'

>>> os.path.commonpath (['/ usr / lib', '/ usr / local / lib'])
'/ usr'
 
os.path. имя каталога ( путь )

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

os.path. существует ( путь )

Вернуть Истина , если путь относится к существующему пути или открытому
дескриптор файла.Возвращает Ложь для неработающих символических ссылок. На
на некоторых платформах эта функция может возвращать False , если разрешение
не предоставлено для выполнения os.stat () в запрошенном файле, даже
если путь физически существует.

Изменено в версии 3.3: путь теперь может быть целым числом: Истина возвращается, если это
дескриптор открытого файла, Ложь в противном случае.

os.path. лексисты ( путь )

Вернуть Истина , если путь ссылается на существующий путь.Возвращает True для
битые символические ссылки. Эквивалент существует () на платформах без
os.lstat () .

os.path. expanduser ( путь )

В Unix и Windows вернуть аргумент с начальным компонентом ~ или
~ пользователь заменен домашним каталогом этого пользователя .

В Unix начальные ~ заменяются переменной среды HOME
если он установлен; в противном случае домашний каталог текущего пользователя ищется в
каталог паролей через встроенный модуль pwd .Исходный ~ пользователь
ищется прямо в каталоге паролей.

В Windows будет использоваться ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ , если он установлен, в противном случае — комбинация
из HOMEPATH и HOMEDRIVE . Первоначальный
~ пользователь обрабатывается путем удаления последнего компонента каталога из созданного
путь пользователя, полученный выше.

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

Изменено в версии 3.8: больше не использует HOME в Windows.

os.path. переменные расширения ( путь )

Вернуть аргумент с раскрытыми переменными среды. Подстроки формы
$ name или $ {name} заменяются значением переменной среды
наименование . Неправильные имена переменных и ссылки на несуществующие переменные
оставлен без изменений.

В Windows поддерживаются расширения % name% в дополнение к $ name и
$ {имя} .

os.path. getatime ( путь )

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

os.path. getmtime ( путь )

Возвращает время последней модификации пути .Возвращаемое значение — число с плавающей запятой.
дающий количество секунд с начала эпохи (см. модуль time ).
Вызовите OSError , если файл не существует или недоступен.

os.path. getctime ( путь )

Возвращает ctime системы, который в некоторых системах (например, Unix) является временем
последнее изменение метаданных, а в других случаях (например, Windows) — время создания для пути .Возвращаемое значение — это число, дающее количество секунд с начала эпохи (см.
модуль время ). Вызов OSError , если файл не существует или
недоступен.

os.path. getize ( путь )

Возвращает размер в байтах пути . Вызов OSError , если файл
не существует или недоступен.

os.path. isabs ( путь )

Вернуть Истина , если путь является абсолютным путем.В Unix это означает
начинается с косой черты, в Windows — с косой черты (обратной) после нарезки
с потенциальной буквы диска.

os.path. isfile ( путь )

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

os.дорожка. isdir ( путь )

Вернуть Истина , если путь — это существующий каталог . Этот
следует по символическим ссылкам, поэтому и islink () , и isdir () могут быть истинными
по тому же пути.

os.path. islink ( путь )

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

os.path. ismount ( путь )

Вернуть Истина , если путь путь — точка монтирования : точка в
файловая система, в которой смонтирована другая файловая система. В POSIX
функция проверяет, находится ли родительский путь пути , путь / .. , на другом
устройство, чем путь , или путь /.. и пути указывают на один и тот же
i-node на том же устройстве — это должно определять точки монтирования для всех Unix
и варианты POSIX. Он не может надежно обнаружить крепления на
та же файловая система. В Windows корень с буквой диска и общий UNC
всегда точки монтирования, а для любого другого пути GetVolumePathName вызывается
чтобы увидеть, отличается ли он от входного пути.

Новое в версии 3.4: Поддержка определения точек монтирования без полномочий root в Windows.

os.дорожка. соединение ( путь , * пути )

Разумно объедините один или несколько компонентов пути. Возвращаемое значение — это
конкатенация пути и любых элементов * путей ровно с одним
разделитель каталогов после каждой непустой части, кроме последней, что означает
что результат будет заканчиваться разделителем только в том случае, если последняя часть пуста. Если
компонент — это абсолютный путь, все предыдущие компоненты отбрасываются
и соединение продолжается от компонента абсолютного пути.

В Windows буква диска не сбрасывается, если компонент абсолютного пути
(например, r '\ foo' ) встречается. Если компонент содержит привод
буква, все предыдущие компоненты выбрасываются, а буква диска
перезагрузить. Обратите внимание: поскольку для каждого диска есть текущий каталог,
os.path.join ("c:", "foo") представляет путь относительно текущего
каталог на диске C: ( c: foo ), а не c: \ foo .

os.дорожка. нормальный корпус ( путь )

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

os.path. нормальный путь ( путь )

Нормализовать путь путем удаления избыточных разделителей и верхнего уровня
ссылки так, чтобы A // B , A / B / , A /./ B и A / foo /../ B все
стать A / B . Эта манипуляция со строкой может изменить значение пути
содержащий символические ссылки. В Windows он преобразует косую черту в
обратная косая черта. Чтобы нормализовать регистр, используйте normcase () .

Примечание

В системах POSIX в соответствии со стандартом IEEE Std 1003.1 2013 года; 4,13
Разрешение имени пути,
если путь начинается ровно с двух косых черт, первый компонент
следующие за ведущими символами могут интерпретироваться в определяемом реализацией
образом, хотя более двух ведущих символов должны рассматриваться как
одиночный персонаж.

os.path. реальный путь ( путь )

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

Примечание

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

Изменено в версии 3.8: Символические ссылки и переходы теперь разрешены в Windows.

os.path. relpath ( путь , start = os.curdir )

Вернуть относительный путь к файлу путь либо из текущего каталога, либо
из необязательного каталога start . Это вычисление пути:
к файловой системе не осуществляется доступ для подтверждения существования или природы пути или
начало . В Windows ошибка ValueError возникает, когда пути и запускают
находятся на разных дисках.

start по умолчанию os.curdir .

Доступность: Unix, Windows.

os.path. тот же файл ( путь2 , путь3 )

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

Доступность: Unix, Windows.

Изменено в версии 3.2: Добавлена ​​поддержка Windows.

Изменено в версии 3.4: Windows теперь использует ту же реализацию, что и все другие платформы.

os.path. sameopenfile ( FP1 , FP2 )

Вернуть True , если файловые дескрипторы fp1 и fp2 относятся к одному и тому же файлу.

Доступность: Unix, Windows.

Изменено в версии 3.2: Добавлена ​​поддержка Windows.

os.path. samestat ( stat1 , stat2 )

Вернуть True , если кортежи stat stat1 и stat2 относятся к одному и тому же файлу.
Эти структуры могли быть возвращены os.fstat () ,
os.lstat () или os.stat () . Эта функция реализует
базовое сравнение, используемое samefile () и sameopenfile () .

Доступность: Unix, Windows.

Изменено в версии 3.4: Добавлена ​​поддержка Windows.

os.path. разделить ( путь )

Разделить путь путь на пару, (голова, хвост) , где хвост — это
последний компонент имени пути и заголовок — это все, что к этому ведет. В
хвостовая часть никогда не будет содержать косую черту; если путь заканчивается косой чертой, хвост
будет пусто.Если в пути нет косой черты, голова будет пустой. Если
путь пуст, и голова и хвост пусты. Завершающие слэши
удаляется из головы , если это не корень (только одна или несколько косых черт). В
во всех случаях, join (голова, хвост) возвращает путь к тому же месту, что и путь
(но струны могут отличаться). Также см. Функции dirname () и
базовое имя () .

os.дорожка. раздельный привод ( путь )

Разделить путь путь на пару (диск, хвост) , где диск либо
точка монтирования или пустая строка. В системах, которые не используют привод
спецификации, диск всегда будет пустой строкой. Во всех случаях привод
+ tail
будет таким же, как path .

В Windows разделяет имя пути на диск / UNC sharepoint и относительный путь.

Если путь содержит букву диска, диск будет содержать все
до толстой кишки включительно.
например splitdrive ("c: / dir") возвращает ("c:", "/ dir")

Если путь содержит путь UNC, диск будет содержать имя хоста
и доля, до четвертого разделителя, но не включая его.
например splitdrive ("// хост / компьютер / каталог") возвращает ("// хост / компьютер", "/ каталог")

os.path. splitext ( путь )

Разделите путь путь на пару (root, ext) так, чтобы root + ext ==
путь
, а ext пуст или начинается с точки и содержит не более одного
период.Начальные точки в базовом имени игнорируются; разделенный текст ('. Cshrc')
возвращает ('.cshrc', '') .

os.path. supports_unicode_filenames

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

Python | Метод os.path.dirname () — GeeksforGeeks

Модуль ОС в Python предоставляет функции для взаимодействия с операционной системой.ОС входит в состав стандартных служебных модулей Python. Этот модуль обеспечивает переносимый способ использования функций, зависящих от операционной системы. Модуль os.path — это подмодуль модуля OS в Python, который используется для управления общим именем пути.

os.path.dirname () Метод в Python используется для получения имени каталога по указанному пути.

Синтаксис: os.path.dirname (путь)

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

Тип возвращаемого значения: Этот метод возвращает строковое значение, которое представляет имя каталога из указанного пути.

Код: Использование os.path.dirname () метод

Скрипт 5.6 7,0 7,1 7,2 7,3 7,4
директ (1 папка) 1,4 2,76 2,08 2,51 1,38 2,29 2,55 2,3615 2,65 1,57
dirname (1 папка) 1,5815 2,27 2,741524 2,41 1,5215
имя каталога (много папок) 1,68 2,29 2,0815 3,29 2,6815 1,87

6 :

/ home / Пользователь
/ главная / Пользователь / Документы

 

Ссылка: https://docs.python.org/3/library/os.path.html

Внимание компьютерщик! Укрепите свои основы с помощью курса Python Programming Foundation и изучите основы.

Для начала подготовьтесь к собеседованию.

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

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

импорт

  • 0 9329 932 932 932 путь = '/ home / User / Documents'

    dirname = os.path.dirname (путь)

    print (dirname)

    path = /file/user/home/

    dirname = os.path.dirname (путь)

    print (dirname)

    = 'файл.txt '

    dirname = os.path.dirname (путь)

    print (dirname) 26