Как выделить имя файла из полного пути

Обновлено: 06.07.2024

Привет, кодеры!! В этой статье мы разберемся, как получить имя файла из заданного пути в python. Мы подробно обсудим его кодирование, объяснив модули и функции, используемые для кодирования. Итак, не теряя времени, давайте сразу перейдем к теме.

Что такое Путь?

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

Пример Структуры Каталогов

В Microsoft Windows отчет будет описан следующим образом:

Программа Python для получения имени файла из Path:

Объяснение:

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

Синтаксис:

Параметр:

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

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

Строка, представляющая базовое имя файла в указанном пути.

Python Программа для получения имени файла из Пути без расширения

Объяснение:

метод os.path.splitext() в python-это функция, доступная в ОС.модуль пути. Он в основном делит путь на две части:

  • root: все, кроме расширительной части
  • ext: удлинительная часть

Синтаксис:

Параметр:

Путь этого должен быть отделен от расширительной части

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

Список, содержащий корневую часть и расширенную часть файла.

В этом коде, используя метод os.path.basename (), мы сначала извлекли имя файла указанного пути. Затем, используя метод os.path.splitext (), мы разделили это имя файла и напечатали только корневую часть, то есть имя файла без расширения.

Программа Python для получения имени файла из Path без ОС

Объяснение:

ntpath-это реализация ОС.путь на платформах Win32 и Win64.

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

Объяснение:

os.path.join() - это метод в ОС.модуль path python используется для соединения одного или нескольких компонентов path.

Синтаксис:

Параметр:

  • path: путь, к которому вы хотите конкатенировать
  • *path: компоненты пути, которые необходимо объединить

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

Строка, представляющая объединенные компоненты пути

Должен Читать

  • [Лучшие] Способы удаления файла в Python
  • Python не распознается как внутренняя или внешняя команда
  • Как вычислить квадратный корень в Python
  • Реализация алгоритма Дейкстры в Python
  • Numpy Square Root | Use case Evaluation of Math Toolkit

Вывод:

Итак, вот как можно получить имя файла из пути в python. Это относительно простой процесс. Одна функция может выполнить эту задачу.

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

Перегрузки

Возвращает имя и расширение файла из пути к файлу, представленного диапазоном символов только для чтения.

Возвращает имя файла и расширение указанной строки пути.

GetFileName(ReadOnlySpan<Char>)

Возвращает имя и расширение файла из пути к файлу, представленного диапазоном символов только для чтения.

Параметры

Диапазон только для чтения, содержащий путь, из которого нужно получить имя и расширение файла.

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

Символы, следующие за последним символом разделителя каталогов в пути path .

Комментарии

Возвращаемый диапазон только для чтения содержит символы пути, следующие за последним разделителем в path . Если последним символом в path является символ или разделитель каталога, метод возвращает значение ReadOnlySpan<T>.Empty . Если path не содержит символа разделителя, метод возвращает значение path .

См. также раздел

Применяется к

GetFileName(String)

Возвращает имя файла и расширение указанной строки пути.

Параметры

Строка пути, из которой нужно получить имя файла и расширение.

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

Символы, следующие за последним символом разделителя каталогов в пути path . Если последним символом параметра path является символ разделения тома или каталога, этот метод возвращает Empty. Если значением параметра path является null , метод возвращает null .

Исключения

Примеры

в следующем примере демонстрируется поведение GetFileName метода на настольной платформе на основе Windows.

Комментарии

Возвращаемое значение —, null Если путь к файлу — null .

Символы разделения, используемые для определения начала имени файла, — это DirectorySeparatorChar и AltDirectorySeparatorChar .

поскольку \ является допустимым именем файла в unix, GetFileName работа с платформами на базе unix не может правильно возвращать имя файла из пути на основе Windows, например C: \ mydir \ myfile. ext, но GetFileName выполняемые на платформах на основе Windows могут правильно возвращать имя файла из пути на основе unix, например /тмп/мифиле.екст, поэтому поведение GetFileName метода не является строго одинаковым на платформах на базе unix и Windows.

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

Я хочу извлечь имя и расширение из этих файлов. Можете ли вы привести пример простого способа сделать это?

чтобы извлечь имя файла без расширения, используйте boost::filesystem:: path:: stem вместо уродливого std:: string:: find_last_of(".")

если вы хотите безопасный способ (т. е. переносимый между платформами и не поставив предположений по пути), я бы рекомендовал использовать boost::filesystem .

это выглядело бы как-то так:

затем вы можете извлечь различные данные из этого пути. вот документация объекта path.

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

вам нужно бежать \ в строке дословно:

или использовать / вместо:

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

вы должны будете прочитать ваши имена файлов из файла в std::string . Вы можете использовать оператор извлечения строки std::ostream . После того, как у вас есть имя файла в std::string можно использовать std::string::find_last_of метод поиска последнего разделителя.

что-то вроде этого:

  1. читать std::string из входного потока ( std::ifstream ), каждый экземпляр будет полный путь
  2. сделать find_last_of на строку \
  3. извлеките подстроку из этой позиции до конца, теперь это даст вам имя файла
  4. сделать find_last_of на . , и подстрока с обеих сторон даст вам имя + расширение.

Я также использую этот фрагмент для определения соответствующего символа косой черты:

а затем замените косую черту на предпочтительную косую черту для ОС. Полезно, если он постоянно развертывается между Linux/Windows.

для linux или unix машин, ОС имеет две функции, связанные с пути и имена файлов. используйте man 3 basename, чтобы получить дополнительную информацию об этих функциях. Преимущество использования системной функциональности заключается в том, что вам не нужно устанавливать boost или писать свои собственные функции.

пример кода из man-страницы:

из-за неконстантного типа аргумента функции basename() это немного не прямолинейно используя это внутри кода C++. Вот простой пример из моей базы кода:

использование new / delete не является хорошим стилем. Я мог бы положить его в try / catch блок на случай, если что-то произошло между двумя вызовами.

У меня есть список файлов, хранящихся в .log в этом синтаксисе:

Я хочу извлечь имя и расширение из этих файлов. Можете ли вы привести пример простого способа сделать это?

ОТВЕТЫ

Ответ 1

Чтобы извлечь имя файла без расширения, используйте boost:: filesystem:: path:: stem вместо уродливого std::string:: find_last_of ( "." )

Ответ 2

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

Это выглядело бы так:

Затем вы можете извлечь различные данные с этого пути. Здесь документация объекта пути.

Кстати: Также помните, что для использования пути, типа

вам нужно избежать \ в строковом литерале:

Или используйте / вместо этого:

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

Ответ 3

Вам нужно будет прочитать ваши имена файлов из файла в std::string . Вы можете использовать оператор извлечения строки std::ostream . Когда у вас есть имя файла в std::string , вы можете использовать метод std::string::find_last_of , чтобы найти последний разделитель.

Что-то вроде этого:

Ответ 4

Не код, но вот идея:

  • Прочитайте std::string из входного потока ( std::ifstream ), каждый прочитанный экземпляр будет полным путем
  • Сделайте find_last_of в строке для \
  • Извлеките подстроку из этой позиции до конца, теперь она даст вам имя файла
  • Сделайте find_last_of для . , а подстрока с обеих сторон даст вам имя + расширение.

Ответ 5

Для С++ 17:

Как было предложено @RoiDanto, для форматирования вывода std::out может окружать вывод с помощью котировок, например:

Вы можете преобразовать std::filesystem::path в std::string на p.filename().string() , если это вам нужно, например:

Ответ 6

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

а затем замените косые черты на предпочтительную косую черту для ОС. Полезно, если вы постоянно развертываете Linux/Windows.

Ответ 7

Для Linux или Unix-устройств os имеет две функции, связанные с именами путей и файлов. используйте man 3 basename, чтобы получить дополнительную информацию об этих функциях. Преимущество использования предоставляемой системой функциональности заключается в том, что вам не нужно устанавливать boost или писать собственные функции.

Пример кода с man-страницы:

Из-за типа аргумента non-const функции basename() это немного не прямолинейно, используя этот код внутри С++. Вот простой пример из моей базы кода:

Использование нового/удаления не является хорошим стилем. Я мог бы положить его в попытку/поймать блок в случае, если что-то произошло между двумя вызовами.

Читайте также: