2017-09-14 77 views
0

我有一個重命名所有.mp3目錄中的文件,以連續號碼的腳本:的腳本重命名文件編號跳過一些文件

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 

與名稱功能定義爲:

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 

的問題是,它似乎跳過目錄中的22或21個元素: skipped

它可以跳過這個數字在differen牛逼運行:

skipped other number

我無法找到的bug ......

回答

1

的問題是,你的for循環遞增的i值即使對於非MP3文件。

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