Переименование файлов в их имя - PullRequest
0 голосов
/ 06 марта 2012

Привет там.

У меня есть папка Movies с подпапками внутри.
В этих подпапках (это название фильма) находятся фактические файлы фильмов, которые я хотел бы переименовать из somename.nfo в subfoldername.release и из somename.mkv в subfoldername.mkv.

Структура папок выглядит так:
полный / La.Haine.1995.1080p.BluRay.DTS.x264-ДОН / л · ч-don.mkv
полный / La.Haine.1995.1080p.BluRay.DTS.x264-ДОН / л · ч-don.nfo

и хотел бы автоматически переименовать его так:

полный / La.Haine.1995.1080p.BluRay.DTS.x264-ДОН / La.Haine.1995.1080p.BluRay.DTS.x264-DON.mkv
полный / La.Haine.1995.1080p.BluRay.DTS.x264-ДОН / La.Haine.1995.1080p.BluRay.DTS.x264-DON.release

Моя библиотека в Mac OS с Perl и Python. Я могу легко адаптировать любой сценарий, но мне нужно несколько советов о том, как установить и прочитать имя папки как некоторую переменную.

Все указания приветствуются :-)
Спасибо за чтение.

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Вот пример на Perl.

Возможно, вы захотите изменить это, но в нем показано, как использовать opendir / readdir, и это то, что вам нужно, я думаю. Его можно было бы сделать намного короче, но, вероятно, не так хорошо выглядеть, как эта версия Python, поэтому я выбрал многословно и (надеюсь) ясно:)

#!/usr/bin/env perl
#
use warnings;
use strict;

my $rootdir = 'your/root/dir';
opendir( my $rootdh, $rootdir ) || die;
foreach my $dir ( readdir $rootdh ) {
    # skip over the special directories . and ..
    if ($dir =~ m/^\./) {
        next;
    }
    # only want directories
    next unless ( -d "$rootdir/$dir" );
    opendir( my $dh, "$rootdir/$dir" ) || die;
    foreach my $file ( readdir $dh ) {
        if ($file =~ m/^\./) {
            next;
        }
        # only want files this time
        next unless ( -f "$rootdir/$dir/$file" );
        my $extension = $file;
        $extension =~ s/.*\.//g;
        print "$rootdir/$dir/$file", " will be renamed to: ", "$rootdir/$dir/$dir.$extension", "\n";
        # uncomment this when you're ready!
        #rename "$rootdir/$dir/$file" "$rootdir/$dir/$dir.$extension";
    }
}
2 голосов
/ 06 марта 2012

Как правило, вы можете использовать glob.glob() для такого рода вещей. Но поскольку вы хотите рекурсивно просматривать папки, вы можете использовать вместо них комбо os.walk и fnmatch:

import os
import fnmatch

for root, dirnames, filenames in os.walk('/start/dir/'):
  for filename in fnmatch.filter(filenames, '*.mkv'):
    # do your rename here
...