Python:一个看似空格但不是';没有空间。这是怎么一回事?

Python:一个看似空格但不是';没有空间。这是怎么一回事?,python,python-3.x,char,space,Python,Python 3.x,Char,Space,这是在Python3.4中实现的 我正在为自己写我的第一个程序,我被困在某个地方。我正在尝试根据python中的元数据重命名所有音频文件。但是,当我尝试重命名文件时,它有时无法完成重命名。我认为这是由于一个无效的字符。问题是我不知道它是什么性格。对我来说,它看起来像一个空间,但它不是 我的代码在这里: from tinytag import TinyTag import os print("Type in the file directory of the songs you would li

这是在Python3.4中实现的

我正在为自己写我的第一个程序,我被困在某个地方。我正在尝试根据python中的元数据重命名所有音频文件。但是,当我尝试重命名文件时,它有时无法完成重命名。我认为这是由于一个无效的字符。问题是我不知道它是什么性格。对我来说,它看起来像一个空间,但它不是

我的代码在这里:

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)
这是它输出的列表:

它应该输出“Artist-Title.mp3”,但有时输出“Artist-Title.mp3”。当空间存在时,python会在此时停止重命名它。第一个这样做的条目是Arethra Franklin。它只是将文件命名为Arethra Franklin,而不是Arethra Franklin-Dr.Feelgood.mp3

为什么会这样?我的主要问题是那个空间是什么?我试着设置一个==布尔值,看看它是否是一个空格(“”),但它不是


它在到达该“空间”后停止重命名。但是,当它碰到一个正常的空间时,它不会

文件名中可能包含一些unicode。如果您正在寻找的只是一个文件重命名器,那么您可以使用
字符替换错误并处理错误。例如:

# -*- 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

如评论中所述,您可以使用来找出“违规空间”到底是什么。

这是一个png,无法复制/粘贴以进行检查。按原样张贴原始标题。这可能是一种逃避;在Arethra Franklin中,128以上没有unicode字符,因此如果您尝试读取ascii字节,您可能会看到字符/序列。在获得艺术家字符串后,请尝试
print(ord(艺术家[-1]))
以查看字符的确切内容或
print(repr(艺术家))
好的,我已经完成了ord(艺术家[-1]]结果显示为0。这是空的,对吗?所以我可以简单地检查最后一个字符是否等于0,如果等于,则将其删除?print(repr(artist))将该字符显示为\x00@DavidLe更好的是,只需执行
new\u title=artist.strip(“\x00”)+”-“+title+”.mp3”
操作系统重命名(name.encode,new\u title)也可以工作?os.rename不认识新名称吗?encode查找要重命名的文件?我是说文件名不是name.encode,对吗?澄清一下,我实际上不是指name.encode。我是指name.encode('encoding','replacement)