#python #filesystems #directory-traversal
#python #файловые системы #обход каталогов
Вопрос:
У меня есть каталог музыки, в котором есть папки с альбомами, а также отдельные песни на каждом уровне. Как я могу просмотреть все эти файлы, которые также закодированы в разных форматах (mp3, wav и т. Д.)? Кроме того, есть ли способ, которым я могу переименовать их в формат, который более соответствует моему вкусу, используя регулярные выражения?
Спасибо
Комментарии:
1. Я обычно беру деньги за кодирование чего-то подобного. Вот что-то похожее, что я написал в perl, вы можете хотя бы увидеть приблизительную идею: github.com/eberle1080/oggsync
2. @Chris: ой, 300 строк Perl для обхода и переименования файлов?
3. Нет, 300 строк для перекодирования из одного формата в другой. Разве это не то, что было после операции?
4. @Chris: Я думаю, вам следует прочитать вопрос 🙂
5. Да, упс. Мой плохой. Я прочитал это неправильно.
Ответ №1:
os.walk
чтобы просмотреть файлы в каталоге и его подкаталогах, рекурсивноos.rename
чтобы переименовать их
Я думаю, что кодирование файлов здесь не играет никакой роли. Вы, конечно, можете определить их расширение (использовать os.path.splitext
для этого) и сделать что-то на его основе, но пока вам просто нужно переименовывать файлы (т. Е. Манипулировать их именами), Содержимое вряд ли имеет значение.
Ответ №2:
Я использую этот фрагмент кода в программе, которую я написал. Я использую его для получения рекурсивного списка файлов изображений, шаблон вызова выглядит примерно так re.compile(r'.(bmp|jpg|png)$', re.IGNORECASE)
. Я думаю, вы поняли идею.
def getFiles(dirname, suffixPattern=None):
dirname=os.path.normpath(dirname)
retDirs, retFiles=[], []
for root, dirs, files in os.walk(dirname):
for i in dirs:
retDirs.append(os.path.join(root, i))
for i in files:
if suffixPattern is None or
suffixPattern.search(i) is not None:
retFiles.append((root, i))
return (retDirs, retFiles)
После того, как у вас будет список, будет легко применить правило переименования. os.rename
ваш друг, смотрите http://docs.python.org/library/os.html .