การเปลี่ยนชื่อไฟล์เป็นชื่อโฟลเดอร์

สวัสดี.

ฉันมีโฟลเดอร์ภาพยนตร์ที่มีโฟลเดอร์ย่อยอยู่ข้างใน
ในโฟลเดอร์ย่อยเหล่านั้น (ซึ่งเป็นชื่อของภาพยนตร์) คือไฟล์ภาพยนตร์จริงๆ ซึ่งฉันต้องการเปลี่ยนชื่อจาก somename.nfo เป็น subfoldername.release และจาก somename.mkv เป็น subfoldername.mkv

โครงสร้างโฟลเดอร์เป็นดังนี้:
complete/La.Haine.1995.1080p.BluRay.DTS.x264-DON/lh-don.mkv
สมบูรณ์/La.Haine.1995.1080p.BluRay.DTS.x264-DON/lh-don.nfo

และต้องการโดยอัตโนมัติเปลี่ยนชื่อเป็น:

complete/La.Haine.1995.1080p.BluRay.DTS.x264-DON/La.Haine.1995.1080p. BluRay.DTS.x264-DON.mkv
สมบูรณ์/La.Haine.1995.1080p.BluRay.DTS.x264-DON/La.Haine.1995.1080p.BluRay.DTS.x264-DON.release

ห้องสมุดของฉันอยู่บน Mac OS โดยมี Perl และ Python อยู่ ฉันสามารถปรับเปลี่ยนสคริปต์ใดๆ ได้อย่างง่ายดาย แต่ต้องการคำแนะนำเกี่ยวกับวิธีการตั้งค่าและอ่านชื่อโฟลเดอร์เป็นตัวแปรบางประเภท

ยินดีต้อนรับทุกคำแนะนำ :-)
ขอบคุณที่อ่าน


person discofris    schedule 06.03.2012    source แหล่งที่มา
comment
บางทีเราอาจทำในทางกลับกัน คุณลอง เราปรับตัว   -  person Niklas B.    schedule 06.03.2012


คำตอบ (2)


นี่คือตัวอย่างในภาษา Perl

คุณอาจต้องการแก้ไขสิ่งนี้ แต่มันแสดงวิธีใช้ opendir/readdir ซึ่งเป็นสิ่งที่คุณต้องการ ฉันคิดว่า มันสามารถทำให้สั้นกว่านี้ได้มาก แต่อาจจะไม่ดูดีเท่าเวอร์ชั่นไพ ธ อนนั้น ดังนั้นฉันจึงใช้รายละเอียดและ (หวังว่า) ชัดเจน :)

#!/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";
    }
}
person AntonioD    schedule 06.03.2012
comment
สิ่งนี้ทำงานได้สมบูรณ์แบบ โดยขาดเพียง comma ในบรรทัดเปลี่ยนชื่อ :-) ตอนนี้ฉันต้องคิดหาอะไรบางอย่างเพื่อให้นามสกุล nfo เปลี่ยนชื่อเป็น release - person discofris; 06.03.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
person wim    schedule 06.03.2012