Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/17: Рейтинг темы: голосов - 17, средняя оценка - 4.88
zie_R9
-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23
#1

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

21.04.2015, 23:36. Просмотров 3019. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2015, 23:36
Ответы с готовыми решениями:

Имена каталогов в Python 2.7.2
Здравствуйте. У меня установлены: windows 7 professional и ArcGIS 10.1, в...

Почему в цикле не находятся файлы при любом списке файлов?
у меня Python 3.2.5 import os def CountFileDir(): InpFile =...

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

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

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

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

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

Добавлено через 2 минуты
Рекурсивное определение данных возникает тогда, когда структура данных (запись, объект) содержит вложенный объект, структурно аналогичный самому себе или (что бывает чаще) ссылку на такой же объект
0
alex925
2664 / 2276 / 627
Регистрация: 19.03.2012
Сообщений: 8,826
23.04.2015, 22:20 #22
Цитата Сообщение от 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
zie_R9
-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23
23.04.2015, 23:19  [ТС] #23
Да, так конечно лучше. Интересно сколько времени надо чтобы Python освоить?
0
alex925
2664 / 2276 / 627
Регистрация: 19.03.2012
Сообщений: 8,826
23.04.2015, 23:30 #24
Если ты раньше программировал и есть опыт, то совсем мало при усердии, а если ты новичок в этом деле, то все зависит, от того как быстро сможешь переварить новую информацию. Тут просто главное не только знание синтаксиса, а ещё и знание правил оформления (PEP), некоторой базы касательно алгоритмов и т д

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

Я тебе для начала советую прочесть http://pythonworld.ru/osnovy/pep-8-r...na-python.html, тут основы оформления кода описаны + читай Марк Лутц Изучаем python, отличная книга.
0
zie_R9
-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23
24.04.2015, 02:19  [ТС] #25
Понятно.
С оформлением кода у меня никаких проблемм.
Поскольку использую VIM в терминале а к нему есть несколько очень хороших
плагинов. Указывают ошибки и даже дают подсказки как исправить.
Ни в одном IDE такого не нашёл. А книгу как раз эту и читаю, уже примерно месяц.
Но одной книги не хватает а подсказать не кому. Я сейчас вообще людей не
каждую неделю вижу. Так что Вам большое спасибо за подсказки, всё становится
намного понятнее. Кстати это первый форум на котором я нашёл реальную
помощ. А это уже четвёртый.
0
alex925
2664 / 2276 / 627
Регистрация: 19.03.2012
Сообщений: 8,826
24.04.2015, 09:49 #26
Цитата Сообщение от 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
zie_R9
-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23
24.04.2015, 13:37  [ТС] #27
По пунктам:

Поставил 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
alex925
2664 / 2276 / 627
Регистрация: 19.03.2012
Сообщений: 8,826
24.04.2015, 13:55 #28
Цитата Сообщение от zie_R9 Посмотреть сообщение
Нет для питона нормального IDE под Linux.
У меня linux и все работает безукоризнено, так что это тебе почему-то не повезло.

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

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

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

Цитата Сообщение от zie_R9 Посмотреть сообщение
Вы не могли бы написать ещё парочку примеров?
http://pythonworld.ru/osnovy/formatirovanie-strok-metod-format.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
zie_R9
-8 / 2 / 0
Регистрация: 21.04.2015
Сообщений: 23
24.04.2015, 14:50  [ТС] #31
Спасибо. Пока у Лутца этого не нашёл в методах для строк. Может есть в другом
месте до которого не дочитал. Надеюсь буду применять и дойдёт.
0
24.04.2015, 14:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2015, 14:50

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

Получить имена файлов из папки, переименовать файл
Можно ли получить имена всех файлов в папке например с расширением .dbf Как...

Как вывести имена каталогов, в которых есть каталоги?
Задание : Shell-программа выводит имена тех каталогов в каталоге, которые в...


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

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru