我有一个包含100多个mp3文件的文件夹。
他们尊重这种模式:' AgencyInfo
'
我有一个代码来重命名我的所有文件,它的工作几乎没问题。 除了我在文件名中有一些西里尔字符时遇到麻烦的事实。
例如:
/音乐时:
000. MSK_NAME.mp3
renamer.py:
'''
011. ?????? - ? ?? ???? ??? ???? (Dima Flash.mp3
012. ?????? feat. ?????? ??????? - ???????? (DJ Shtopor & DJ Oleg Petroff Remix).mp3
018. MarQ Markuz - ?????? (DJ A.G. RnDeep Remix).mp3
026. Serebro - ?????????? (DJ Denis Rublev & DJ Anton Remix).mp3
027. Samoel feat. ?????? - ????????????? ????? (Oleg Perets & Alexey Galin Remix) .mp3
029. 5sta Family - ????? (Tony Sky Sax Remix) .mp3
030. ???? ???? - ????? ????? (Dj Jurbas Nu-Disco Mix ).mp3
036. Quest Pistols - ????? ????? (DJ Denis Rublev & DJ Timur Remix).mp3
037. Serebro - ?????????? (Mickey Martini & Alexx Slam Remix).mp3
041. ??? - ???? ? ???? (Tony Sky Remix).mp3
'''
或许我应该改变这样的东西:
# -*- coding: utf-8 -*-
import os
folder = "C:\\users\\myuser\\desktop\\musics"
for item in os.listdir(folder):
item2 = item[5:]
path = folder + "\\" + item
try:
renamed = folder + "\\" + item2
os.rename(path, renamed)
except:
#how am I supposed to create converted a filename without these Cyrillic characters ?
#i think it has something to do with using the translit() function from transliterate library
continue
print "Done."
因此...
有人可以告诉我使用translit()
为except:
renamed2 = translit(path, 'ru', reversed=True)
os.rename(path, renamed2)
方法创建有效文件名的正确方法吗?
也许是这样的:
os.rename()
但是在循环文件夹内的文件时......
答案 0 :(得分:1)
答案:
在搜索了一下后,我找到了以下解决方案:
将folder = "C:\\Users\\myuser\\Desktop\\musics"
更改为folder = u"C:\\Users\\myuser\\Desktop\\musics"
在我的except:
部分添加了以下代码。
<强>修正:强>
except:
newName = translit(item, 'ru', reversed=True)
renamed2 = folder + "\\" + newName
os.rename(path, renamed2)
<强>代码:强>
# -*- coding: utf-8 -*-
import os
from transliterate import translit
folder = u"C:\\Users\\myuser\\Desktop\\musics"
for item in os.listdir(folder):
item2 = item[:]
path = folder + "\\" + item
try:
renamed = folder + "\\" + item2
os.rename(path, renamed)
except:
newName = translit(item, 'ru', reversed=True)
renamed2 = folder + "\\" + newName
os.rename(path, renamed2)
print "done."