Python: Как зациклить процесс

#python #loops #file-organization

#python #циклы #организация файлов

Вопрос:

Я работаю над созданием небольшого приложения / скрипта для размещения моих 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] , и я не знаю, как это сделать с помощью циклов. На самом деле у меня мало знаний о циклах. Я достаточно ясно выразился?

Ответ №1:

 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)
  

Комментарии:

1. Извините, не работает, потому что на второй раз в цикле он возвращает ошибку для makedirs, потому что каталоги уже были созданы.

2. @user738534 Добавьте вокруг него инструкцию try: except: docs.python.org/tutorial/errors.html

Ответ №2:

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