Python:一个看似空格但不是';没有空间。这是怎么一回事?
这是在Python3.4中实现的 我正在为自己写我的第一个程序,我被困在某个地方。我正在尝试根据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
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)