Python: как зациклить процесс - PullRequest
0 голосов
/ 04 мая 2011

Я работаю над созданием небольшого приложения / скрипта для размещения моих mp3 в иерархии папок так, как я этого хочу, так как я не нашел решения для Unix, которое было бы совершенно правильным.Поэтому я решил работать самостоятельно.Это выдержка

if musfile[0]:
    m = musfile[0]
    tag.link(m)
    mar = str(tag.getArtist())
    mal = str(tag.getAlbum())
    mti = str(tag.getTitle())
    #m1track = str(tag.getTrack())
    os.rename(m,mar + ' - ' + mti + '.mp3')
    m = mar + ' - ' + mti + '.mp3'
    os.makedirs(newmusicdir + '/' + mar + '/' + mal + '/')
    shutil.copy(m,newmusicdir + '/' + mar + '/' + mal + '/')

if musfile[1]:
    m = musfile[1]
    tag.link(m)
    mar = str(tag.getArtist())
    mal = str(tag.getAlbum())
    mti = str(tag.getTitle())
    #m1track = str(tag.getTrack())
    os.rename(m,mar + ' - ' + mti + '.mp3')
    m = mar + ' - ' + mti + '.mp3'
    os.makedirs(newmusicdir + '/' + mar + '/' + mal + '/')
    shutil.copy(m,newmusicdir + '/' + mar + '/' + mal + '/')

И так далее.Однако, чтобы организовать более одного файла, я просто повторно использовал блоки кода.Однако это крайне неэффективно для нескольких блоков кода.Например, если бы я хотел организовать всего 50 песен с помощью моего метода, у меня было бы более 500 строк кода, для чего-то такого простого.Так что мне было интересно, есть ли в любом случае я мог бы использовать петли.Однако проблема с использованием циклов заключается в том, что с каждым блоком я должен менять номер в списке.Например, с первого по второй блок я должен изменить musfile[0] на musfile[1], и я не знаю, как это сделать с помощью циклов.На самом деле у меня мало знаний о петлях.Я достаточно ясно?

Ответы [ 2 ]

4 голосов
/ 04 мая 2011
import os, os.path
import shutil

for m in musfile:
    tag.link(m)
    mar = str(tag.getArtist())
    mal = str(tag.getAlbum())
    mti = str(tag.getTitle())
    new_name = mar + ' - ' + mti + '.mp3'
    os.rename(m, new_name)
    new_dir = os.path.join(newmusicdir, mar, mal)    #use os.path.join instead of +'/' to be more multi platform, it is a good habit
    try:
        os.makedirs(new_dir)
    except:
        pass
    shutil.copy(new_name, new_dir)
0 голосов
/ 04 мая 2011

Это не отвечает на ваш первоначальный вопрос, но вот мое решение аналогичной проблемы: Импортер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...