Я прошу прощения, что гружу своими задачами, но, просмотрев несколько часов форум и попробовав пару дюжин вариантов, понял, что без подсказки не разберусь.
Дано:
Каталог музыки с именами вида: "<Исполнитель> - <Песня>.mp3"
Нужно привести этот каталог к виду "<Исполнитель>/<Песня>.mp3"
Пример:
./Алла Пугачева - Белый снег.mp3
./Алла Пугачева - В Петербурге сегодня гроза.mp3
./Алсу - Всё равно.mp3
./Алсу - Вчера.mp3
./Алсу - Зимний сон.mp3
./Андрей Губин - Девушки как звёзды.mp3
./Андрей Губин - Птица.mp3
./Андрей Макаревич - Перекресток.mp3
Выходит, нужно сначала создать каталог с именем исполнителя, взяв это имя из имени файла, а потом в него переместить сам файл, обрезав у его имени начало до названия песни. И так для каждого файла.
Может, кто-то сталкивался с такой задачей?
Если не сложно, вспомните, как вы с ней справились.
for f in os.listdir('.'):
if os.path.isfile(f) and f[-3:] == 'mp3':
dir_name = f.split('-', 1)[0].strip()
file_name = f.split('-', 1)[1].strip()
os.renames(f, os.path.join(dir_name, file_name))
for f in os.listdir('.'):
if os.path.isfile(f) and f[-3:] == 'mp3':
dir_name = f.split('-', 1)[0].strip()
file_name = f.split('-', 1)[1].strip()
os.renames(f, os.path.join(dir_name, file_name))
Супер! Это работает и очень быстро! И Питон, конечно, рулит.
А можно ли модифицировать код так, чтобы вместо перемещения файлов только создавались симлинки и чтобы каталог, где создается результат, можно было задать вручную.
То есть.
/откуда надо/Алла Пугачева - Белый снег.mp3
А можно ли модифицировать код так, чтобы вместо перемещения файлов только создавались симлинки и чтобы каталог, где создается результат, можно было задать вручную.
если я правильно понял задачу, то должно быть примерно так:
text
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import os
result_path = raw_input('Куда будем делать симлинки?')
if os.path.exists(result_path):
pass
else:
os.makedirs(result_path)
for f in os.listdir('.'):
if os.path.isfile(f) and f[-3:] == 'mp3':
dir_name = f.split('-', 1)[0].strip()
file_name = f.split('-', 1)[1].strip()
if os.path.exists(os.path.join(result_path, dir_name)):
pass
else:
os.makedirs(os.path.join(result_path, dir_name))
os.symlink(f, os.path.join(result_path, dir_name, file_name))
скрипт спросит куда создавать симлинки и после обработает все mp3-файлы в каталоге, где скрипт расположен.
условно, пусть "куда надо" = /home/vasya/mp3
скрипт сделает симлинки вида /home/vasya/mp3/Исполнитель/Песня.mp3 для всех mp3-файлов в текущем каталоге.
p.s. этот скрипт для python 2. в python 3 вроде raw_input() нету, там через input(), емнип, строки вводят.
Супер! Всем спасибо!
(Вы открыли мне Пайтон! Уже второй день программирую - оторваться не могу!)
Уже написал сортировку по каталогам, дуэты раскладываю по исполнителям, и обработку исключений приделал, и с изменением регистра русских слов разобрался.