2017-09-14 4 views
0

I持って連続した番号にディレクトリ内のすべての.mp3のファイルの名前を変更するスクリプト:問題があるスクリプトは、いくつかのファイルをスキップし

def get_valid_name_from_index(index): 
'''index must be 0-based, return value is >=1''' 
valid_name = str(index + 1) + '.mp3' 

if index + 1 < 10 : 
    valid_name = '0' + valid_name 

return valid_name 

:名前機能付き

dir = os.getcwd() if len(sys.argv) == 1 else sys.argv[1] 
os.chdir(dir) 
filenames_in_dir = os.listdir(dir) 

mpr_search_expr = re.compile('.mp3') 

currNumber = 0; 
for filename in filenames_in_dir: 
    # ignore non-mp3 files 
    if mpr_search_expr.search(filename): 
     #change title to number 
     audiofile = eyed3.load(filename) 
     audiofile.tag.title = get_valid_name_from_index(currNumber) 
     audiofile.tag.save() 

     #change name to number 
     os.rename(filename, get_valid_name_from_index(currNumber)) 
     currNumber += 1 

のように定義されましたディレクトリ内の22または21の要素をスキップしているように見えます。 skipped

そして、この数字をdifferenでスキップできますtが実行されます。

skipped other number

私はバグを見つけることができません...

答えて

1

問題は、あなたのループのためにも、非mp3ファイル用iの値をインクリメントすることです。

for i in range(len(filenames_in_dir)): 
    # ignore non-mp3 files BUT INCREMENT value of i 
    if mpr_search_expr.search(filenames_in_dir[i]): 
     os.rename(filenames_in_dir[i], get_valid_name_from_index(i)) 

あなたは

j = 0 
for i in range(len(filenames_in_dir)): 
    # ignore non-mp3 files 
    if mpr_search_expr.search(filenames_in_dir[i]): 
     j+= 1 
     os.rename(filenames_in_dir[i], get_valid_name_from_index(j)) 
+0

ような何かを行う必要がありますはい、ありがとうございましたが、それは問題を解決していなかった – TheSmokingGnu

+0

問題はまだ同じですか?わかりません。それでも問題はありますが、スクリプトが変更されてから出力が変更されているはずです。 – mquantin

+0

注:あなたの質問に答えた場合は「正解」としてくださいが、削除しないでください。 – mquantin

関連する問題