Python:看似空格但不是空格的字符是什么?

2 投票
1 回答
777 浏览
提问于 2025-04-18 10:34

这是在使用Python 3.4。

我正在为自己写第一个程序,但在某个地方卡住了。我想根据音频文件的元数据来重命名所有的音频文件。但是,当我尝试重命名文件时,有时候它并没有完成重命名。我觉得可能是因为有一个无效的字符。问题是我不知道那个字符是什么。看起来像是空格,但其实不是。

我的代码在这里:

from tinytag import TinyTag
import os

print("Type in the file directory of the songs you would like to rename and organize:")
directory = input()
os.chdir(directory)
file_list = os.listdir(directory)

for item in file_list:
    tag = TinyTag.get(item)
    title = str(tag.title)
    artist = str(tag.artist)
    if artist[-1] == "\t" or artist[-1] == " ":
        print("Found it!")
    new_title = artist + "-" + title + ".mp3"
    #os.rename(item, new_title)
    print(new_title)

这是它输出的列表: http://imgur.com/tfgBdMZ

它应该输出“Artist-Title.mp3”,但有时候输出的是“Artist -Title .mp3”。当出现那个空格时,Python就会在那儿停止重命名。第一个出现这种情况的是Arethra Franklin。它只是把文件命名为Arethra Franklin,而不是Arethra Franklin-Dr.Feelgood.mp3。

为什么会这样?我主要想知道那个空格是什么?我尝试设置一个布尔值来检查它是否是空格(“ ”),但结果不是。

它在遇到那个“空格”时就停止重命名,但遇到正常的空格时却不会。

1 个回答

0

文件名里可能有一些Unicode字符。如果你只是想要一个文件重命名的工具,可以使用 str.encode,并通过把错误的地方替换成一个 ? 字符来处理这些问题。举个例子:

# -*- coding: utf-8 -*-
funky_name = u"best_song_ever_пустынных.mp3"
print (funky_name)
print (funky_name.encode('ascii','replace'))

这样做会得到:

best_song_ever_пустынных.mp3
best_song_ever_?????????.mp3

正如评论中提到的,你可以使用 ord 来查找到底是什么“问题字符”。

撰写回答