Как получить имя файла Python

Обновлено: 23.11.2024

Вы можете использовать несколько способов получить имя файла из пути к файлу. Python предоставляет множество модулей, таких как модули os, pathlib и ntpath, которые могут помочь вам получить имя файла из входного пути к файлу. Давайте рассмотрим различные способы извлечения имени файла из пути к файлу.

Python получает имя файла из пути

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

Есть альтернативный способ. Вы также можете использовать метод os.path.split(), чтобы получить имя файла из пути. Другой модуль, называемый pathlib в Python, предоставляет функцию Path().name, которую можно использовать для извлечения имени файла из пути к файлу.

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

Чтобы получить имя файла из пути, используйте метод os.path.basename(). При работе с UNIX или MacOS в качестве разделителя пути используется косая черта /, а в Windows в качестве разделителя используется обратная косая черта \.

Синтаксис

Аргументы

Метод basename() принимает один объект, похожий на путь, представляющий путь к файловой системе.

Пример

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

Следующий шаг – определение пути к файлу.

Из пути к файлу видно, что имя файла — app.py. Чтобы извлечь это из пути к файлу, используйте функцию os.path.basename().

Вывод

Из вывода видно, что мы получили именно то, что просили. Когда метод os.path.basename() используется в системе POSIX для получения базового имени из пути в стиле Windows; будет возвращен полный путь.

Универсальное решение для получения имени файла из пути к файлу

Модуль os.path отлично работает в MacOS, но не в ОС Linux или Windows. Если вы запускаете свой скрипт Python в Linux и пытаетесь обработать классический путь в стиле Windows, это не удастся.

Вот почему вы можете использовать модуль ntpath (эквивалентный os.path при работе в Windows), который будет работать для всех путей на всех платформах.

Модуль ntpath обеспечивает функциональность os.path на любой платформе. Вы также можете использовать его для обработки путей Windows или других платформ.

Для работы с модулем ntpath вам необходимо импортировать его в свой файл, а затем использовать функцию ntpath.basename().

Вывод

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

os.path.split() — это встроенный метод Python, используемый для разделения имени пути на пару «голова» и «конец». Хвостовая часть будет нашим именем файла.

Синтаксис

Аргументы

Метод os.path.split() принимает объект, похожий на путь, представляющий путь к файловой системе.

Пример

Метод os.path.split() возвращает начало и конец. Хвост — это имя файла, а голова — это путь к файлу, и нас интересует имя файла.

Вывод

Как видите, метод split() возвращает значения начала и конца, и мы напечатали хвост, то есть имя файла.

Использование функции pathlib.Path().name

Модуль pathlib позволяет использовать классы, представляющие пути файловой системы с семантикой, подходящей для разных операционных систем. Например, метод Path() возвращает полный путь к файлу, а затем вы можете применить к нему свойство name, которое вернет имя файла.

Вывод

Это все, что нужно для получения имени файла из пути в Python.

См. также

Крунал Латия – инженер по информационным технологиям. По профессии он веб-разработчик со знанием нескольких внутренних платформ (например, PHP, Node.js, Python) и интерфейсных сред JavaScript (например, Angular, React и Vue).

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

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

Python получить имя файла из пути

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

Пример:

После написания приведенного выше кода (python получает имя файла из пути), вы напечатаете те, что будут выводиться в виде « list.py ». Вы можете обратиться к приведенному ниже снимку экрана для создания имени файла python get из пути.

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

Python получает размер файла

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

После написания приведенного выше кода (Python получает размер файла), сначала вы напечатаете «file_size», после чего вывод будет выглядеть как «Размер файла 78 байт». Здесь мы использовали функцию getsize() для получения размера файла. Вы можете обратиться к приведенному ниже снимку экрана, где Python получает размер файла.

Вот как мы можем получить размер файла в Python.

Python получает расширение файла из имени файла

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

Пример:

После написания приведенного выше кода (Python получает расширение файла из имени файла), вы напечатаете «f_ext», после чего вывод будет выглядеть как «.txt». Здесь имя файла будет разделено на две части, и когда мы напечатаем f_ext, оно даст расширение имени файла. Вы можете обратиться к приведенному ниже снимку экрана. Python получает расширение файла из имени файла.

Вот как мы можем получить расширение файла из имени файла в Python.

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

Чтобы получить имя файла без расширения в python, мы импортируем модуль os, а затем можем использовать метод os.path.splitext() для получения имени.

Пример:

После написания приведенного выше кода (Python получает имя файла без расширения), вы напечатаете «f_name», после чего вывод будет выглядеть как «файл». Здесь имя файла будет разделено на две части, и когда мы напечатаем f_name, расширение будет удалено. Вы можете обратиться к приведенному ниже снимку экрана. Python получает имя файла без расширения.

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

Вам могут понравиться следующие учебные пособия по Python:

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

  • Как получить имя файла из пути в Python
  • Как получить размер файла в Python
  • Как получить расширение файла из имени файла в Python
  • Как получить имя файла без расширения в Python

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

Я пытаюсь получить имя выполняемого в данный момент скрипта Python.

У меня есть скрипт с именем foo.py, и я хочу сделать что-то вроде этого, чтобы получить имя скрипта:

13 ответов 13

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

Если вы хотите опустить часть каталога (которая может присутствовать), вы можете использовать os.path.basename(__file__) .

@sdaau: __file__ не определен в интерактивном интерпретаторе, потому что там он не имеет смысла. Он задается реализацией импорта, поэтому, если вы используете нестандартный механизм импорта, он также может быть отключен.

По крайней мере, для Python 2.7, я считаю, что для этого требуется операционная система импорта. Я бы добавил это в ответ.

Это напечатает foo.py для python foo.py , dir/foo.py для python dir/foo.py и т. д. Это первый аргумент python . (Обратите внимание, что после py2exe это будет foo.exe .)

@DenisMalinovsky: определите "не будет работать". Если вы вызываете python linkfile.py , где linkfile.py является символической ссылкой на realfile.py , sys.argv[0] будет 'linkfile.py' , что может быть или не быть тем, что вы хотите; это, безусловно, то, что я ожидаю. __file__ то же самое: это будет linkfile.py. Если вы хотите найти 'realfile.py' из 'linkfile.py', попробуйте os.path.realpath('linkfile.py') .

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

Этот ответ хорош, потому что он работает и в IDLE. Обратите внимание: чтобы получить только имя файла, вы можете написать os.path.basename(sys.argv[0])

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

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

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

Ответ состоит из четырех разделов:

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

Предостережение относительно обработки относительных путей.

Рекомендация по обработке символических ссылок.

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

Извлечение полного пути к файлу

__file__ – это исполняемый в данный момент файл, как указано в официальной документации:

__file__ — это путь к файлу, из которого был загружен модуль, если он был загружен из файла. Атрибут __file__ может отсутствовать для некоторых типов модулей, таких как модули C, которые статически связаны с интерпретатором; для модулей расширения, загружаемых динамически из общей библиотеки, это путь к файлу общей библиотеки.

Начиная с Python3.4 и далее, согласно проблеме 18416, __file__ всегда является абсолютным путем, если только текущий исполняемый файл не является скриптом, который был выполнен напрямую (а не через интерпретатор с помощью команды -m вариант строки) с использованием относительного пути.

__main__.__file__ (требуется импорт __main__ ) просто обращается к вышеупомянутому атрибуту __file__ основного модуля, например сценария, который был вызван из командной строки.

Начиная с Python3.9 и далее, согласно проблеме 20443, атрибут __file__ модуля __main__ стал абсолютным, а не относительным путем.

sys.argv[0] (требуется импорт sys ) — это имя сценария, который был вызван из командной строки, и может быть абсолютным путем, как указано в официальной документации:

argv[0] — это имя сценария (это зависит от операционной системы, является ли это полным путем или нет). Если команда была выполнена с использованием параметра командной строки -c для интерпретатора, argv[0] устанавливается в строку '-c' . Если интерпретатору Python не было передано имя сценария, argv[0] будет пустой строкой.

Как упоминалось в другом ответе на этот вопрос, скрипты Python, которые были преобразованы в автономные исполняемые программы с помощью таких инструментов, как py2exe или PyInstaller может не отобразить желаемый результат при использовании этого подхода (например, sys.argv[0] будет содержать имя исполняемого файла, а не имя основного файла Python в этом исполняемом файле).

Если ни один из вышеупомянутых вариантов не работает, вероятно, из-за нетипичного процесса выполнения или неправильной операции импорта, может оказаться полезным модуль inspect. В частности, вызов inspect.stack()[-1][1] должен работать, хотя он вызовет исключение при работе в реализации без кадра стека Python.

Начиная с Python3.6 и далее, как подробно описано в другом ответе на этот вопрос, можно установить внешнюю библиотеку с открытым исходным кодом, lib_programname, предназначенную для предоставления полное решение этой проблемы.

Эта библиотека перебирает все перечисленные выше подходы, пока не будет возвращен допустимый путь. Если все они терпят неудачу, это вызывает исключение. Он также пытается устранить различные ловушки, такие как вызовы через структуру pytest или модуль pydoc.

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

При работе с подходом, возвращающим относительный путь, может возникнуть соблазн вызвать различные функции манипулирования путями, такие как os.path.abspath(.) или os.path.realpath(.), чтобы извлечь полный или реальный путь.

Обработка символических ссылок

Если текущий скрипт является символической ссылкой, то все вышеперечисленное вернет путь символической ссылки, а не путь реального файла, и для извлечения файла следует вызвать os.path.realpath(. ). последний.

Дальнейшие манипуляции, извлекающие фактическое имя файла

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

Начиная с Python 3.4 и далее, согласно PEP 428, класс PurePath модуля pathlib также можно использовать в любом из вышеперечисленных . В частности, pathlib.PurePath(. ).name извлекает фактическое имя файла, а pathlib.PurePath(. ).stem извлекает фактическое имя файла без суффикса.

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

Используйте библиотеку Python ntpath для получения имени файла из пути

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

Библиотека ntpath поддерживает функцию basename . Этой функции передается путь, и после выполнения ntpath.basename(path) возвращает имя файла из заданного пути. Базовый пример использования этого метода показан ниже:

Используйте Python ntpath.basename() для получения имени файла из пути

Эта библиотека также будет работать в Linux. Однако в Linux имена файлов могут содержать обратную косую черту. Таким образом, в Linux r'usr/xyz\python' всегда ссылается на файл xyz\python в папке usr.

Это относится к имени файла python в подпапке xyz папки usr в Windows. Мы должны знать, какую платформу мы используем, когда в пути используются как обратная, так и прямая косая черта. В противном случае вы можете неправильно интерпретировать путь.

Есть еще один способ получить имя файла из пути, использующего os.path.basename() .

Python Получить имя файла из пути, используя os.path.basename()

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

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

Ниже приведен пример кода.

Если используется система POSIX и путь в стиле Windows, содержащий двойную косую черту, передается в os.path.basename() , выводом будет указанный полный путь.

Python Получить имя файла из пути, используя os.path.split()

Если голова и хвост нужны по отдельности, можно использовать метод os.path.split(). Этот метод принимает путь в качестве аргумента и возвращает начало и конец пути.

Пример кода приведен ниже.

Статьи DelftStack написаны такими же фанатами программного обеспечения, как и вы. Если вы также хотите внести свой вклад в DelftStack, написав платные статьи, вы можете посетить страницу «Написать для нас».

Статья по теме — Путь Python

сообщить об этом объявлении

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

Как получить имя файла?

Как упоминалось ранее, путь состоит из трех частей: расширения файла, имени файла и местоположения файла. Во-первых, нам нужно будет разделить имя пути и расширение. Затем от имени пути мы отделим имя файла путем к каталогу. Мы рассмотрим 6 способов получения имени файла без расширения в Python.

1. Использование splitext() для получения имени файла без расширения в Python

Метод splitext() можно использовать для получения имени файла в Python без расширения. Метод присутствует в модуле os Python. Используя модуль os.path, мы можем использовать его для работы с путями в python. С помощью splitext() мы можем разделить весь путь на две части — расширение и корень.

Синтаксис метода splitext():

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

Давайте реализуем функцию на python. Во-первых, мы импортируем модуль os.

У нас есть переменная с именем 'directory', которая содержит полный путь к нашему файлу.

Теперь мы вызовем метод splitext() с помощью os.path.splitext(). Мы передадим переменную directory внутри метода splitext(). Поскольку метод генерирует кортеж, состоящий из двух частей, мы сохраним расширение в переменной с именем 'extension', а остальную часть пути — в переменной с именем 'pathname'.

Если мы попытаемся распечатать вывод os.path.splitext(), возвращенный кортеж будет таким:

Теперь мы разделим переменную ‘path’ с помощью косой черты в качестве разделителя.

После этого мы напечатаем последний элемент списка ‘filename’, который будет фактическим именем файла.

Вывод:

Весь код:

Здесь, если вам нужен полный путь , вы можете просто не разбивать переменную ‘pathname’ и сразу использовать ее в качестве имени файла.

2. С помощью метода split() для получения имени файла без расширения в Python

Подобно методу splitext(), мы также можем использовать метод split() для получения имени файла без расширения. Для использования функции split() нет необходимости импортировать модуль os. Нам придется дважды вызвать функцию split().

Сначала мы разделим расширение и остальную часть имени пути. Затем мы разделим расширение файла. Разделителем для первой функции split() будет символ '.', а разделителем для второй функции split() будет символ косая черта '/'.

Здесь, после первого разделения, мы сохраним вывод в переменную ‘name’. Затем мы разделим первый элемент списка ‘name’, используя ‘name[0].split()’ с косой чертой в качестве разделителя. Затем мы напечатаем последний элемент списка имя_файла

.

Вывод:

Здесь, если вам нужен полный путь, мы просто напечатаем ‘name[0]’.

3. Использование rfind() для получения имени файла без расширения в Python

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

Синтаксис функции rfind():

Мы можем использовать метод rfind() со строкой. Здесь значение — это элемент, последнее вхождение которого должно быть возвращено. Начальная и конечная позиции представляют начальную и конечную позиции при поиске строки. По умолчанию начальным значением является 0, а конечным значением является длина строки.

Здесь мы вызовем функцию rfind(), используя directory.rfind(). Внутри функции rfind() мы будем передавать точку ‘.’ в качестве значения. Мы сохраним индекс символа точки в переменной с именем 'index'. Затем мы напечатаем строку 'directory' от 0-го символа до значения < em>'индекс'.

Вывод:

Если вам нужно только имя файла ‘program1’, мы можем split() использовать символ косой черты.

4. Использование функции Basename() для получения имени файла без расширения в Python

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

Синтаксис функции:

Мы должны передать весь pathname в функцию basename() в качестве аргумента. Сначала мы импортируем модуль ОС.

Выводом 'os.path.basename(directory)' будет 'program1.csv'. Итак, мы вызовем функцию разделения и передадим точку символ в качестве разделителя. Это вернет список, содержащий [ ‘program1’ , ‘csv’ ]. Итак, мы напечатаем первый элемент этого списка.

Вывод будет таким:

5. Использование pathlib.Path.stem() для получения имени файла без расширения в Python

Модуль pathlib в python используется для работы с путями к файлам. Если мы не хотим получать полный путь, мы можем использовать pathlib.Path.stem(). Используя свойство стебля, мы получим имя файла без его расширения.

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

Имя выходного файла:

6. С помощью функции rpartition() для получения имени файла без расширения в Python

Функция rpartition() разбивает заданную строку на три части. Одна часть будет разделителем, а две другие части будут строками слева и справа от разделителя.

Синтаксис функции rpartition():

Вывод:

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

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