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

Обновлено: 17.05.2024

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

Каталог в Python

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Удаление

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

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

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

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

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

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

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

Модуль встроенный, поэтому для работы с ним не нужно ничего устанавливать.

Вывод текущей директории

Для получения текущего рабочего каталога используется os.getcwd() :

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

Создание папки

Для создания папки/каталога в любой операционной системе нужна следующая команда:

После ее выполнения в текущем рабочем каталоге тут же появится новая папка с названием «folder».

Если запустить ее еще раз, будет вызвана ошибка FileExistsError , потому что такая папка уже есть. Для решения проблемы нужно запускать команду только в том случае, если каталога с таким же именем нет. Этого можно добиться следующим образом:

Функция os.path.isdir() вернет True , если переданное имя ссылается на существующий каталог.

Изменение директории

Менять директории довольно просто. Проделаем это с только что созданным:

Еще раз выведем рабочий каталог:

Создание вложенных папок

Предположим, вы хотите создать не только одну папку, но и несколько вложенных:

Это создаст три папки рекурсивно, как показано на следующем изображении:

Создание вложенных папок

Создание файлов

Для создания файлов в Python модули не нужны. Можно использовать встроенную функцию open() . Она принимает название файла, который необходимо создать в качестве первого параметра и желаемый режим открытия — как второй:

w значит write (запись), a — это appending (добавление данных к уже существующему файлу), а r — reading (чтение). Больше о режимах открытия можно почитать здесь.

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

С помощью модуля os достаточно просто переименовать файл. Поменяем название созданного в прошлом шаге.

Я пытаюсь переименовать некоторые файлы в каталоге с использованием Python.

скажем, у меня есть файл с названием CHEESE_CHEESE_TYPE.*** и хотите удалить CHEESE_ таким образом, мое результирующее имя файла будет CHEESE_TYPE

Я пытаюсь использовать os.path.split но это не работает должным образом. Я также рассматривал возможность использования струнных манипуляций, но также не был успешным с этим.

использовать os.rename(src, dst) переименовать или переместить файл или каталог.

вот сценарий, основанный на вашем новейшем комментарии.

предполагая, что вы уже находитесь в каталоге и что" первые 8 символов " из вашего комментария всегда верны. (Хотя "Cheese" - это 7 символов. ? Если это так, измените 8 ниже на 7)

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

у меня такая же проблема, где я хочу заменить пробел in any pdf file to a dash - . Но файлы были в нескольких подкаталогах. Итак, мне пришлось использовать os.walk() . В вашем случае для нескольких подкаталогов это может быть что-то вроде этого:

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

этот вид материала идеально подходит для IPython, который имеет интеграцию оболочки.

Примечание: чтобы сохранить это в скрипте, используйте .ipy расширение и префикс всех команд оболочки с ! .

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

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

вот более общее решение:

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

эта команда удалить нач строка "Cheese" из всех файлов в текущем каталоге, используя renamer:

вы можете использовать ОС.системная функция для простоты и вызова bash для выполнения задачи:

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

в Linux я успешно использовал помощью krename, в Windows Total Commander переименование с помощью регулярных выражений, но я не нашел достойного бесплатного эквивалента для OSX, поэтому я закончил писать скрипт python, который работает рекурсивно и по умолчанию печатает только новые имена файлов без каких-либо изменений. Добавить '- w' переключитесь, чтобы изменить имена файлов.

пример использования

Я хочу перевернуть части имени файла следующим образом, т. е. переместить бит m7-08 к началу имени файла:

это выполнит сухой запуск и распечатает новые имена файлов без фактического переименования каких-либо файлов:

это сделает фактическое переименование (вы можете использовать либо -w или --write ):

Модуль стандартной библиотеки os (от «operation system») предоставляет множество полезных функций для произведения системных вызовов. Одна из базовых функций этого модуля — os.listdir .

С точки зрения операционной системы нет разницы между файлом, папкой или другим подобным объектом, типа ссылки. Поэтому os.listdir() возвращает список как файлов, так и папок. Обратите внимание, что порядок элементов возвращаемого списка не регламентируется, если вам нужно их отсортировать не забудьте сделать это:

Модуль os содержит подмодуль os.path , который позволяет работать с путями файлов и папок. Импортировать этот модуль отдельно не нужно, достаточно выполнить import os .

Присоединение одной части пути к другой

Работа с путями к файлам и папкам как с простыми строками чревата множеством ошибок и может создать проблемы при переносе программы между различными операционными системами. Правильный путь объединить две части пути — это использование os.path.join :

Извлечение имени файла из пути

Функция os.path.split совершает обратное действие — отрезает имя файла или ниже лежащей папки от пути:

Извлечение расширения

Кроме того, может пригодиться функция os.path.splitext , котоая отрезает расширение файла:

Проверка типа файла

Кроме прочего, модуль os.path содержит функции для проверки существования файла и для определения его типа:

Производите все манипуляции с файлами с осторожностью, придерживайтесь правила «семь раз отмерь — один раз отрежь». Не забывайте программно производить все возможные проверки перед выполнением операций.

Создание файла

Нет ничего проще, чем создать пустой файл, достаточно открыть несуществующий файл с флагом 'x' :

Конечно, можно было бы использовать флаг 'w' , но тогда уже существующий файл был бы стёрт. С флагом 'x' open либо создаст новый файл, либо выбросит ошибку.

Создание папки

Для создания новой папки используйте os.mkdir(name) . Эта функция выбросит ошибку, если по указанному пути уже существует файл или папка. Если вам нужно создать сразу несколько вложенных папок, то смотрите функцию os.makedirs(name, exist_ok=False) .

Перемещение и переименование

Для удобной манипуляции с файлами и папками в стандартной библиотеки Python существует специальный модуль shutil . Функция shutil.move(source, destination) позволяет вам переместить любой файл или папку (даже непустую). Обратите внимание, что если destination — это уже существующая папка, то файл/папка будет перемещена внутрь неё, в остальных случаях файл/папка будут скопированы точно по нужному адресу. В случае успеха, функция вернёт новое местоположение файла. Если destination существует и не является папкой, то будет выброшена ошибка.

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

Копирование

Скопировать файл можно с помощью функции shutil.copy(source, destination) . Правила расположения копии будут те же, что и при использовании shutil.move , за тем исключением, что если destination существует и не является файлом, то он будет заменён и ошибки это не вызовет.

Скопировать папку для операционной системы сложнее, ведь мы всегда хотим скопировать не только папку, но и её содержимое. Для копирования папок используйте shutil.copytree(source, destination) . Обратите внимание, что для этой функции destination всегда должно быть путём конечного расположения файлов и не может быть уже существующей папкой.

Удаление

Удалить файл можно с помощью функции os.remove , а пустую папку с помощью функции os.rmdir .

А вот для удаления папки с содержимым вновь понадобится shutil . Для удаления такой папки используйте shutil.rmtree .

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

  1. В текущей папке лежат файлы с расширениями .mp3 , .flac и .oga . Создайте папки mp3 , flac , oga и положите туда все файлы с соответствующими расширениями.
  2. В текущей папке лежит две других папки: vasya и mila , причём в этих папках могут лежать файлы с одинаковыми именами, например vasya/kursovaya.doc и mila/kursovaya.doc . Скопируйте все файлы из этих папок в текущую папку назвав их следующим образом: vasya_kursovaya.doc , mila_test.pdf и т.п.
  3. В текущей папке лежат файлы следующего вида: S01E01.mkv , S01E02.mkv , S02E01.mkv и т.п., то есть все файлы начинаются с S01 или S02 . Создайте папки S01 и S02 и переложите туда соответствующие файлы.
  4. В текущей папке лежат файлы вида 2019-03-08.jpg , 2019-04-01.jpg и т.п. Отсортируйте файлы по имени и переименуйте их в 1.jpg , 2.jpg , …, 10.jpg , и т.д.
  5. В текущей папке лежат две другие папки: video и sub . Создайте новую папку watch_me и переложите туда содержимое указанных папок (сами папки класть не надо).
  6. В текущей папке лежат файлы типа Nina_Stoletova.jpg , Misha_Perelman.jpg и т.п. Переименуйте их переставив имя и фамилию местами.
  7. В текущей папке лежит файл list.tsv , в котором с новой строки написаны имена некоторых других файлов этой папки. Создайте папку list и переложите в неё данные файлы.

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

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