2017-09-14 80 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