假设我在path
中有以下文件,该文件在连接到Python 3 Colab笔记本的Google驱动器中:
((这里#线代表输出)
ls = os.listdir(path)
print (ls)
# ['á.csv', 'b.csv']
每个人似乎都可以,但是如果我写
'á.csv' in ls
# False
但是应该返回True。但是,如果我重复最后一个代码,而不是写“á.csv”,而是从print (ls)
手动复制粘贴,它将返回True。
谢谢
ps:问题不完全是那个文件名,而是几个文件名,其中包含特殊字符(即í,á,é,ó,ñ)
您可以在比较文件列表之前对其进行标准化。
from unicodedata import normalize
ls = [normalize('NFC', f) for f in os.listdir(path)]
# compare
normalize('NFC', 'á.csv') in ls
# or just 'á.csv' in ls
我相信是因为Unicode中的某些变音符号重复。即,尽管某些字符看起来相同,但它们可能是具有不同代码的不同字符。像写入一样,通过写入'á'.encode()
尝试一次á
,然后通过复制粘贴再次尝试。如果字节看起来不同,那是因为它们是看起来相同的不同字符。