Python 如何用西里尔字母替换西里尔字母来重命名文件?

Python 如何用西里尔字母替换西里尔字母来重命名文件?,python,python-2.7,unicode,rename,cyrillic,Python,Python 2.7,Unicode,Rename,Cyrillic,我有一个包含100多个mp3文件的文件夹 他们尊重这种模式:'000。MSK_NAME.mp3' 我有一个代码来重命名我所有的文件,它几乎可以正常工作。 此外,当文件名有一些西里尔字符时,我还面临一些麻烦 例如: /music: ''' 011. ?????? - ? ?? ???? ??? ???? (Dima Flash.mp3 012. ?????? feat. ?????? ??????? - ???????? (DJ Shtopor & DJ Oleg Petroff Remi

我有一个包含100多个mp3文件的文件夹

他们尊重这种模式:'
000。MSK_NAME.mp3
'

我有一个代码来重命名我所有的文件,它几乎可以正常工作。 此外,当文件名有一些西里尔字符时,我还面临一些麻烦

例如:

/music:

'''
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."
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."
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."
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."
或者,我应该改变除此之外的部分,比如:

except:
    renamed2 = translit(path, 'ru', reversed=True) 
    os.rename(path, renamed2)
print translit(u"Лорем ипсум долор сит амет", 'ru', reversed=True)
# Output: Lorеm ipsum dolor sit amеt
所以

  • 我应该如何创建一个没有这些西里尔字符的转换文件名
有人能告诉我为
os.rename()
方法创建有效文件名的正确方法吗

也许是这样的:

except:
    renamed2 = translit(path, 'ru', reversed=True) 
    os.rename(path, renamed2)
print translit(u"Лорем ипсум долор сит амет", 'ru', reversed=True)
# Output: Lorеm ipsum dolor sit amеt
但是在文件夹内的文件上循环时…

回答:

在进一步搜索之后,我找到了以下解决方案:

  • folder=“C:\\Users\\myuser\\Desktop\\music”
    更改为
    folder=u“C:\\Users\\myuser\\Desktop\\music”

  • 将以下代码段添加到我的
    中,除了:
    部分

  • 修复:

    '''
    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."
    
    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."
    
    代码:

    '''
    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."
    
    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."
    

    如果对新旧名称使用Unicode字符串,则根本不必进行音译。@MarkTolonen我想这就是我要找的,但无法在我的代码中实现。。。我不知道unicode是怎么工作的。。这对我来说有点奇怪。但这听起来比音译更容易实现。。