как узнать имя файла python

Путь, имя и расширение файла

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

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

Для того чтобы узнать в Python абсолютный путь к файлу, потребуется воспользоваться библиотекой os. Её подключаем с помощью команды import os. В классе path есть метод abspath. Вот пример использования.

Так же можно воспользоваться и стандартной библиотекой pathlib. Она вошла в состав основных библиотек, начиная с версии Python 3.4. До этого надо было ее инсталлировать с помощью команды pip install pathlib. Она предназначена для работы с путями файловой системы в разных ОС и отлично подойдет для решения данной задачи.

Имя файла

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

Здесь перед строкой вставил r, чтобы подавить возможное возникновение служебных символов. Например, в данном случае если не указать r, то \f считалось бы символом перевода страницы.

Без расширения

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

Видно, что последнее расширение архиватора gz было отброшено, в то время как расширение несжатого архива tar осталось в имени.

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

Дополним предыдущий пример следующим кодом:

Расширение файла

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

Аналогично можно воспользоваться библиотекой pathlib. Воспользуемся методом suffix.

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

Источник

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

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

Эта статья предназначена как раз для начинающих разработчиков. В ней описаны 8 крайне важных команд для работы с файлами, папками и файловой системой в целом. Все примеры из этой статьи размещены в Google Colab Notebook (ссылка на ресурс — в конце статьи).

Показать текущий каталог

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

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

Так вот, для того чтобы показать текущий каталог, нужна встроенная в Python OS-библиотека:

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

Имейте в виду, что я использую Google Colab, так что путь /content является абсолютным.

Проверяем, существует файл или каталог

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

Функция os.path.exists () принимает аргумент строкового типа, который может быть либо именем каталога, либо файлом.

Читайте также:  актеры погибшие при съемках

В случае с Google Colab при каждом запуске создается папка sample_data. Давайте проверим, существует ли такой каталог. Для этого подойдет следующий код:

Эта же команда подходит и для работы с файлами:

Если папки или файла нет, команда возвращает false.

Объединение компонентов пути

В предыдущем примере я намеренно использовал слеш «/» для разделителя компонентов пути. В принципе это нормально, но не рекомендуется. Если вы хотите, чтобы ваше приложение было кроссплатформенным, такой вариант не подходит. Так, некоторые старые версии ОС Windows распознают только слеш «\» в качестве разделителя.

Но не переживайте, Python прекрасно решает эту проблему благодаря функции os.path.join (). Давайте перепишем вариант из примера в предыдущем пункте, используя эту функцию:

Создание директории

Ну а теперь самое время создать директорию с именем test_dir внутри рабочей директории. Для этого можно использовать функцию
os.mkdir():

Давайте посмотрим, как это работает на практике.

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

Именно поэтому рекомендуется всегда проверять наличие каталога с определенным названием перед созданием нового:

Вот что получается в результате.

Показываем содержимое директории

Еще одна полезная команда — os.listdir(). Она показывает все содержимое каталога.

Команда отличается от os.walk (), где последний рекурсивно показывает все, что находится «под» каталогом. os.listdir () намного проще в использовании, потому что просто возвращает список содержимого:

В некоторых случаях нужно что-то более продвинутое — например, поиск всех CSV-файлов в каталоге «sample_data». В этом случае самый простой способ — использовать встроенную библиотеку glob:

Перемещение файлов

Самое время попробовать переместить файлы из одной папки в другую. Рекомендованный способ — еще одна встроенная библиотека shutil.
Сейчас попробуем переместить все CSV-файлы из директории «sample_data» в директорию «test_dir». Ниже — пример кода для выполнения этой операции:

Кстати, есть два способа выполнить задуманное. Например, мы можем использовать библиотеку OS, если не хочется импортировать дополнительные библиотеки. Как os.rename, так и os.replace подходят для решения задачи.

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

Чтобы все это работало, нужно явно указать имя файла в месте назначения. Ниже — код, который это позволяет сделать:

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

Другая функция, os.replace (), делает то же самое. Но разница в том, что os.replace () не зависит от платформы, тогда как os.rename () будет работать только в системе Unix / Linux.

Еще один минус — в том, что обе функции не поддерживают перемещение файлов из разных файловых систем, в отличие от shutil.

Поэтому я рекомендую использовать shutil.move () для перемещения файлов.

Копирование файлов

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

Если нужно скопировать файл README.md из папки «sample_data» в папку «test_dir», поможет функция shutil.copy():

Удаление файлов и папок

Теперь пришел черед разобраться с процедурой удаления файлов и папок. Нам здесь снова поможет библиотека OS.

Когда нужно удалить файл, нужно воспользоваться командой os.remove():

Если требуется удалить каталог, на помощь приходит os.rmdir():

Однако он может удалить только пустой каталог. На приведенном выше скриншоте видим, что удалить можно лишь каталог level_3. Что если мы хотим рекурсивно удалить каталог level_1? В этом случае зовем на помощь shutil.

Функция shutil.rmtree() сделает все, что нужно:

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

Собственно, на этом все. 8 важных операций по работе с файлами и каталогами в среде Python мы знаем. Что касается ссылки, о которой говорилось в анонсе, то вот она — это Google Colab Network с содержимым, готовым к запуску.

Источник

Файлы в python, ввод-вывод

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

Файлы Python

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

Читайте также:  как узнать номер телефона человека через вк по id номеру бесплатно

В Python существует два типа файлов:

Текстовые файлы

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

Бинарные файлы

В бинарных файлах данные отображаются в закодированной форме (с использованием только нулей (0) и единиц (1) вместо простых символов). В большинстве случаев это просто последовательности битов.

Любую операцию с файлом можно разбить на три крупных этапа:

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

Метод open()

Пример

Создадим текстовый файл example.txt и сохраним его в рабочей директории.

Следующий код используется для его открытия.

Следующий код используется для вывода содержимого файла и информации о нем.

Закрытие файла

Метод close()

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

Существуют следующие способы:

Способ №1

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

Способ №2

Без него программа завершается некорректно.

Вот как сделать это исключение:

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

Способ №3

Инструкция with

В таком случае инструкция close не нужна, потому что with автоматически закроет файл.

Вот как это реализовать в коде.

Чтение и запись файлов в Python

В Python файлы можно читать или записывать информацию в них с помощью соответствующих режимов.

Функция read()

Функция read() используется для чтения содержимого файла после открытия его в режиме чтения ( r ).

Синтаксис

Пример

Функция readline()

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

Пример

Создадим файл test.txt с нескольким строками:

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

Функция write()

Функция write() используется для записи в файлы Python, открытые в режиме записи.

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

Синтаксис

Пример

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

Переименование файлов в Python

Функция rename()

Функция rename() используется для переименовывания файлов в Python. Для ее использования сперва нужно импортировать модуль os.

Пример

Текущая позиция в файлах Python

Источник

Управление каталогами и файлами в Python

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

Каталог в Python

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

Каталог или папка ‒ это набор файлов и подкаталогов. В Python есть модуль os, который предоставляет нам множество полезных методов для работы с каталогами (а также с файлами).

Получить текущий каталог

Мы можем получить текущий рабочий каталог с помощью метода getcwd() модуля os.

Этот метод возвращает текущий рабочий каталог в виде строки. Мы также можем использовать метод getcwdb(), чтобы получить его как байтовый объект.

Дополнительная обратная косая черта подразумевает escape-последовательность. Функция print() отрендерит это правильно.

Смена каталога

Мы можем изменить текущий рабочий каталог с помощью метода chdir().

Новый путь, который мы хотим изменить, должен быть передан этому методу в виде строки. Мы можем использовать как прямую косую черту /, так и обратную косую черту \ для разделения элементов пути.

При использовании обратной косой черты безопаснее использовать escape-последовательность.

Как получить список каталогов и файлов в Python?

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

Читайте также:  как узнать ph геля

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

Создание нового каталога

Мы можем создать новый каталог с помощью метода mkdir().

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

Переименование каталога или файла

Метод rename() может переименовать каталог или файл.

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

Удаление

Файл можно удалить (удалить) с помощью метода remove().

Точно так же метод rmdir() удаляет пустой каталог.

Примечание: Метод rmdir() может удалять только пустые каталоги.

Чтобы удалить непустой каталог, мы можем использовать метод rmtree() внутри модуля shutil.

Источник

Отладка Python: получить имя файла и номер строки, из которой вызывается функция?

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

Который печатает что-то вроде:

Чтобы сделать это проще, я хочу иметь возможность сделать что-то вроде:

Итак, я поместил это в функцию где-то и попытался сделать:

К сожалению, я получаю:

Он выводит имя файла и номер строки, в которой я определил функцию, вместо строки, в которой я вызываю debuginfo (). Это очевидно, потому что код находится в файле debugutil.py.

Итак, мой вопрос на самом деле: Как я могу получить имя файла и номер строки, из которой вызывается эта функция debuginfo ()? Все советы приветствуются!

4 ответа

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

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

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

Это напечатает что-то вроде:

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

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

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

Просто поместите код, который вы разместили в функцию:

А затем используйте его как хотите:

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

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

Источник

Советы мастера