#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:
Это не отвечает на ваш первоначальный вопрос, но вот мое решение аналогичной проблемы: Импортер