-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23

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

21.04.2015, 23:36. Показов 8773. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru