Mengapa skrip penggantian nama dasar ini tidak melakukan apa yang seharusnya? Hanya mencoba untuk memanfaatkan huruf pertama dari setiap kata.

import glob
import os

for filename in glob.glob("**/*.mp3", recursive = True):
    withcap = str(filename).title()

    print("nc " +(filename))
    print("wc " +(withcap))

    os.rename(filename, withcap)

Output dari hasil cetak benar tetapi tidak ada yang terjadi di os.rename?

Keluaran:

nc BLOOD COMMAND - Return Of The Arsonist [Clean].mp3
wc Blood Command - Return Of The Arsonist [Clean].Mp3
0
Gromit 4 Juni 2019, 23:30

2 jawaban

Jawaban Terbaik

Ini dapat terjadi jika Anda menggunakan sistem operasi dengan sistem file case-insensitive -- seperti Windows -- di mana nama asli dan tujuan sudah menunjukkan kepada kita sebagai file yang ada dan menunjuk ke file yang sama.

Solusinya hanyalah mengganti nama melalui nama sementara yang berbeda dalam lebih dari kasus:

for filename in glob.glob("**/*.mp3", recursive = True):
    withcap = str(filename).title()
    os.rename(filename, withcap+'.tmp')
    os.rename(withcap+'.tmp', withcap)
3
Charles Duffy 4 Juni 2019, 20:44

Seperti yang disebutkan dalam komentar, penyebabnya adalah Anda bekerja dengan sistem file yang tidak peka huruf besar-kecil. Itu menganggap nama lama dan baru sama, jadi "ganti nama" menjadi no-op.

Anda harus melakukan dua penggantian nama untuk setiap file: pertama ke nama sementara yang berbeda; kemudian ke nama sebenarnya dengan kapitalisasi yang dimodifikasi.

0
Roland Weber 4 Juni 2019, 20:44