Как выделить имя файла из полного пути
Обновлено: 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 метод поиска последнего разделителя.
что-то вроде этого:
- читать std::string из входного потока ( std::ifstream ), каждый экземпляр будет полный путь
- сделать find_last_of на строку \
- извлеките подстроку из этой позиции до конца, теперь это даст вам имя файла
- сделать 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() это немного не прямолинейно, используя этот код внутри С++. Вот простой пример из моей базы кода:
Использование нового/удаления не является хорошим стилем. Я мог бы положить его в попытку/поймать блок в случае, если что-то произошло между двумя вызовами.
Читайте также: