1

尝试使用 eye3d 0.7.8-final 重命名目录中的所有文件

#! /usr/bin/env python
import os, sys, unicodedata, eyed3

def parse(sourcefile):
    audiofile = eyed3.load(sourcefile)
    if audiofile.tag.artist != audiofile.tag.artist:
        if audiofile.tag.title != audiofile.tag.title:
            temp = u"{0} - {1}.mp3".format(audiofile.tag.artist, audiofile.tag.title)
            os.rename(sourcefile, temp)

def main():
    for filelist in os.listdir('.'):
        if filelist.endswith('.mp3'):
           print u"Processing: {0}".format(filelist)
               parse(filelist)

if __name__ == "__main__":
    os.system('clear')
    main()

我虽然将 u"" 添加到 temp 和 print 可以解决这些问题,但我仍然得到

Traceback (most recent call last):
File "./test.py", line 19, in <module>
main()
File "./test.py", line 14, in main
print u"Processing: {0}".format(filelist)

UnicodeDecodeError: 'ascii' codec can't decode byte 0xcc in position 14: ordinal not in range(128)

我也试过这个

reload(sys)
sys.setdefaultencoding('utf8')

结果如下

Traceback (most recent call last):
File "./test.py", line 21, in <module>
main()
File "./test.py", line 14, in main
print u"Processing: {0}".format(filelist)

UnicodeEncodeError: 'ascii' codec can't encode character u'\u0308' in position 26: ordinal not in range(128)

根据@DevShark,我设置了以下内容,但显示了相同的错误

temp = temp.encode('ascii','ignore')

Traceback (most recent call last):
File "./test.py", line 22, in <module>
main()
File "./test.py", line 15, in main
print u"Processing: {0}".format(filelist)

UnicodeEncodeError: 'ascii' codec can't encode character u'\u0308' in position 26: ordinal not in range(128)

所以看起来文件重命名正确但仍然存在问题

filelist = filelist.encode('ascii','ignore')
print u"Processing: {0}".format(filelist)
4

1 回答 1

-1

我建议不要使用 unicode 来命名文件,而是使用 ascii。根据您的操作系统,它可能会导致不良行为。

您可以在重命名文件之前添加以下行:

temp = temp.encode('ascii', 'ignore')

它只会跳过文件名中的 unicode 字符,并修复您的代码。

如果您想保留 unicode 名称而不是 ascii,我建议您确保您之前充分理解这些概念。如果没有清楚的理解,这是其中之一,可能会导致很多痛苦。

于 2015-06-26T18:44:13.350 回答