Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/43: Рейтинг темы: голосов - 43, средняя оценка - 4.67
-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23

Переименовать файлы в списке не затрагивая имена каталогов

21.04.2015, 23:36. Показов 8717. Ответов 30
Метки нет (Все метки)

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

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
mp3 = '/home/user/torrent/Смерть/Мор, ученик смерти/000.Мор, \
ученик смерти [Заголовок].mp3'
 
 
def RenameMp3(mp3):
    filepath = (os.path.split(mp3)[0] + '/')
 
    if ' ' in os.path.split(mp3)[1]:
        mp3 = filepath + os.path.split(mp3)[1].replace(' ', '_')
 
    if ',' in os.path.split(mp3)[1]:
        mp3 = filepath + os.path.split(mp3)[1].replace(',', '.')
 
    if '[' in os.path.split(mp3)[1]:
        mp3 = filepath + os.path.split(mp3)[1].replace('[', '-')
 
    if ']' in os.path.split(mp3)[1]:
        mp3 = filepath + os.path.split(mp3)[1].replace(']', '-')
 
    if '(' in os.path.split(mp3)[1]:
        mp3 = filepath + os.path.split(mp3)[1].replace('(', '-')
 
    if ')' in os.path.split(mp3)[1]:
        mp3 = filepath + os.path.split(mp3)[1].replace(')', '-')
 
    mp3 = os.path.split(mp3)[0] + '/' + os.path.split(mp3)[1].lower()
    outogg = mp3.replace('.mp3', '.ogg')
    return outogg
 
outogg = RenameMp3(mp3)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.04.2015, 23:36
Ответы с готовыми решениями:

Переименовать файлы в имена, являющиеся их порядковыми номерами
Есть 182 файла в формате png и необходимо переименовать их в порядковый номер. Как это сделать?

Как переименовать файлы в имена, являющиеся их порядковыми номерами?
Есть папка, а в ней порядка 150 файлов. Как с помощью батника поменять имена на 1,2,3...150?

Как переименовать все файлы в папке, на имена из столбца таблицы excel?
Нужно поочередно переименовать все фотографии (JPEG) в папке, взяв имя (7 значное число) в столбце таблицы excel. То есть первый файл в...

30
-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23
23.04.2015, 21:01  [ТС]
Студворк — интернет-сервис помощи студентам
Рекурсивное переименование файлов в заданном каталоге это переименование
всех файлов в указанном каталоге и во всех вложенных каталогах - подкаталогах.
У слова много значеений см. словарь.
В Вашем варианте о рекурсивном переименовании даже говорить не стоит.

Настроение плохое или всегда слишком много самоуверенности?

Добавлено через 2 минуты
Рекурсивное определение данных возникает тогда, когда структура данных (запись, объект) содержит вложенный объект, структурно аналогичный самому себе или (что бывает чаще) ссылку на такой же объект
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
23.04.2015, 22:20
Цитата Сообщение от zie_R9 Посмотреть сообщение
В Вашем варианте о рекурсивном переименовании даже говорить не стоит.
Да, действительно так, не заметил сначала, что нужно переименовывать файлы и в под папках.

Цитата Сообщение от zie_R9 Посмотреть сообщение
Настроение плохое или всегда слишком много самоуверенности?
Лишней самоуверенности нет, не переживай

Вот кстати подправленная версия, тут учтено, что нужно рекурсивно обходить вложенные каталоги.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import os
import sys
 
from os.path import join, abspath
from fnmatch import fnmatch
 
EXTENSION = 'ogg'
 
 
def get_files(target):
    target = abspath(target)
    pattern = '*.{}'.format(EXTENSION)
    res = {}
 
    for root, dirs, files in os.walk(target):
        for i in range(len(files)):
            if fnmatch(files[i], pattern):
                old = join(root, files[i])
                new = join(root, '{}.{}'.format(str(i).zfill(4), EXTENSION))
                res[old] = new
    return res
 
 
def rename(files):
    for old in files.keys():
        os.rename(old, files[old])
 
if __name__ == '__main__':
    if len(sys.argv) >= 2:
        path = sys.argv[1]
        songs = get_files(path)
        if not songs:
            print('Файлов не найдено')
            sys.exit(1)
        rename(songs)
    else:
        print('Передайте путь к нужной папке')
        sys.exit(1)
0
-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23
23.04.2015, 23:19  [ТС]
Да, так конечно лучше. Интересно сколько времени надо чтобы Python освоить?
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
23.04.2015, 23:30
Если ты раньше программировал и есть опыт, то совсем мало при усердии, а если ты новичок в этом деле, то все зависит, от того как быстро сможешь переварить новую информацию. Тут просто главное не только знание синтаксиса, а ещё и знание правил оформления (PEP), некоторой базы касательно алгоритмов и т д

P.S ну, а былокодить научишься почти сразу) Главное учи, что-то новое и если, делают замечания, то не упорствуй в своём невежестве.

Я тебе для начала советую прочесть http://pythonworld.ru/osnovy/p... ython.html, тут основы оформления кода описаны + читай Марк Лутц Изучаем python, отличная книга.
0
-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23
24.04.2015, 02:19  [ТС]
Понятно.
С оформлением кода у меня никаких проблемм.
Поскольку использую VIM в терминале а к нему есть несколько очень хороших
плагинов. Указывают ошибки и даже дают подсказки как исправить.
Ни в одном IDE такого не нашёл. А книгу как раз эту и читаю, уже примерно месяц.
Но одной книги не хватает а подсказать не кому. Я сейчас вообще людей не
каждую неделю вижу. Так что Вам большое спасибо за подсказки, всё становится
намного понятнее. Кстати это первый форум на котором я нашёл реальную
помощ. А это уже четвёртый.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
24.04.2015, 09:49
Цитата Сообщение от zie_R9 Посмотреть сообщение
Ни в одном IDE такого не нашёл
Да, vim это круто, спорить не собираюсь. По поводу, того, что в других такого не нашёл. Это есть в pycharm, просто супер IDE, она только для более ленивых, так как там уже все настроено и она не консольная.

Цитата Сообщение от zie_R9 Посмотреть сообщение
С оформлением кода у меня никаких проблемм.
Да, правила стараешься соблюдать, это видно. Но имена у переменных типо Dict
Цитата Сообщение от zie_R9 Посмотреть сообщение
Dict = dict(zip(f_list, new_names))
или
Цитата Сообщение от zie_R9 Посмотреть сообщение
arg_1 = sys.argv[1]
или
Цитата Сообщение от zie_R9 Посмотреть сообщение
for x, y, z in os.walk(target_dir):
Такие названия переменных никуда не годятся. Называть словарь словарём это вообще туфтология, имя arg_1 - не отображает, то что содержит переменная (будь у тебя 10 аргументов, через некоторое время ты не вспомнишь, что где лежит), в случае walk переменным цикла лучше давать осмысленные названия.

Цитата Сообщение от zie_R9 Посмотреть сообщение
А это уже четвёртый.
А предыдущие 3 это какие форумы если не секрет?
0
-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23
24.04.2015, 13:37  [ТС]
По пунктам:

Поставил pycharm, при первом же запуске он повесил x-server насмерть.
В результате не сохранённые документы. И поверьте что дело
не в моей системе. Java говно. Не зря для моего дистрибутива pycharm
помечен как не стабильный. При втором запуске то же самое, даже не увидел как
он выглядит. Удалил безжалостно! Нет для питона нормального IDE под Linux.
Была бы моя воля вообще бы Джаву в систему не пускал.
Короче - VIM! если не хочется пальцы ломать в консоли Geany слегка помогает.
Хотя конечно не то. Я пробовал все что есть под Linux. Более менее
KDevelop, но выбор между целым KDE и VIM очевидет. Вообще меня в графическом
режиме интересуют всего 3 вещи:
Web-browser, drop-down terminal и панель. Ставлю x-server только для них.
Мышкой пользуюсь только в игрушках, всё на хоткеях. Даже тема рабочего стола
без заголовков окон и кнопочек. Как то так.

По поводу имён переменных согласен буду следить внимательней.
Пока не привык к питону. Надо больше смотреть чужого кода, ну вот как у Вас.
Тогда быстро перейму. Хотя в конечном итоге всё не так плохо,
код который я выклодываю на форум это переделанный по быстрому
просто чтобы было понятно о чём речь. Только не понял почему
'for x, y, z in os.walk(target_dir):' не нравится,
'for i in someobject:' ведь все используют?

А предидущие форымы были: Linux.org, Linuxforum.ru и Gentoo.ru.
Осталось плохое впечатление.
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
24.04.2015, 13:55
Цитата Сообщение от zie_R9 Посмотреть сообщение
Нет для питона нормального IDE под Linux.
У меня linux и все работает безукоризнено, так что это тебе почему-то не повезло.

Linux моя постоянная ОС, так что рассказывать, что под linux нет ide для python не надо.

Добавлено через 2 минуты
Цитата Сообщение от zie_R9 Посмотреть сообщение
Linux.org, Linuxforum.ru и Gentoo.ru.
А, так не удивительно, это форумы совсем для других вопросов.
0
-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23
24.04.2015, 14:00  [ТС]
Наверное дело не в везении а в дистрибутиве и моей настройке состемы.
Если захочу pycharm то он будет, просто другие приоритеты.

Ни как не могу понять до конца метод S.format()
Вы не могли бы написать ещё парочку примеров?
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
24.04.2015, 14:15
Цитата Сообщение от zie_R9 Посмотреть сообщение
Наверное дело не в везении а в дистрибутиве и моей настройке состемы.
Ды, я понимаю, просто образно выразился.
Цитата Сообщение от zie_R9 Посмотреть сообщение
просто другие приоритеты.
Ну да, раз из консоли не вылазишь. Все логично.

Цитата Сообщение от zie_R9 Посмотреть сообщение
Вы не могли бы написать ещё парочку примеров?
http://pythonworld.ru/osnovy/f... ormat.html
Python
1
2
3
4
5
6
str1 = 'Перый аргумент: {} второй: {}'.format('arg1', 'arg2')
print(str1)
str2 = 'Перый аргумент: {1} второй: {0}'.format('arg1', 'arg2')
print(str2)
str3 = 'Перый аргумент: {arg1} второй: {arg2}'.format(arg1=6164, arg2=2458)
print(str3)
В общем за место фигурных скобок подставляются аргументы, которые передаются методу format.

Кстати в книге про которую мы говори все это подробно обсуждается. Ищи в разделе про форматирование строк.
0
-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23
24.04.2015, 14:50  [ТС]
Спасибо. Пока у Лутца этого не нашёл в методах для строк. Может есть в другом
месте до которого не дочитал. Надеюсь буду применять и дойдёт.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.04.2015, 14:50

Переименовать файл, не затрагивая расширения
Всем привет. Что-то не могу понять, как переименовать файл, не затрагивая расширения файла. Пример $img_name =...

В родительском каталоге посчитать количество каталогов и вывести имена каталогов, используя суперблок
Здравствуйте! Собственно часть моего задания написано в шапке темы. Полностью же мое задание звучит так: В родительском каталоге...

Как вывести имена каталогов, в которых нет каталогов?
Помогите реализовать Shell-программа выводит имена тех каталогов в каталоге, которые в себе не содержат каталогов. Имя каталога задано...

Переименовать обычные файлы, имена которых – целые неотриц числа на название того же числа в 16-ой системе счисления
Помогите пожалуйста написать программу на Си для Linux, которая переименовывает обычные файлы, имена которых – целые неотрицательные числа...

Переименовать обычные файлы, имена которых – целые неотриц числа на название того же числа в 16-ой системе счисления
Помогите пожалуйста написать программу на Си для WinAPI, которая переименовывает обычные файлы, имена которых – целые неотрицательные числа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
rest api anylogic - выполнение модели на своём русском сайте
anaschu 02.07.2026
Как подружиться с AnyLogic Cloud API, победить провайдеров и развернуться Java-бэкенд в Docker на бесплатном хостинге: Двухдневный лог борьбы Всем привет! Хочу поделиться свежим (и довольно. . .
Где деньги лежат
kumehtar 02.07.2026
Это - японская подводная лодка I-52 (тип C2, кодовое имя Momi) вышла из Японии в марте 1944 года с миссией в оккупированную немцами Францию (Лорьян). Это была одна из «Янаги»-миссий по обмену. . .
Krabik для WoW 3.3.5a, многоязычный
AmbA 02.07.2026
Допилил бота, думаю что окончательно. Изменения: - добавлена многоязычность - добавлено снятие скриншотов - добавлено поддержание бафов хождения по воде (для жреца, дк и шамана) - и так, по. . .
Алиса нашла кучу ошибок компиляции и запуска в проекте, который без проблем компилировался и запускался)))
anaschu 30.06.2026
Я пока посмеюся, но завтра проверю. А вообще интерсно. Дал алисе файл, в котором точно нет ошибок компиляции и запуска, и попросил их найти. Нашла кучу))) Критические ошибки, мешающие компиляции и. . .
сукцессия 16. Общий обзор, в основном что бы другие ии поняли
anaschu 29.06.2026
# Передаточный документ: модель микоризной сукцессии (для нового чата) Этот документ предназначен для того, чтобы новый чат Claude мог продолжить работу без необходимости заново разбираться в. . .
сукцессия 15 неявная схема
anaschu 29.06.2026
Алиса Калибровка параметров симбиотической модели: технический обзор Содержание: Введение Постановка проблемы Технические аспекты реализации Процесс внедрения изменений
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru