os.listdir return 包含特殊字符的奇怪文件名字符串

os.listdir return strange string of filename with special characters

假设我在 path 中有以下文件,这些文件位于我的 Google 驱动器中,该驱动器连接到 Python 3 Colab 笔记本:

(这里#行代表输出)

ls = os.listdir(path)
print (ls)
# ['á.csv', 'b.csv']

一切似乎都可以,但如果我写

'á.csv' in ls
# False

但应该 returns 正确。但是,如果我重复最后一个代码,而不是编写“á.csv”,我从 print (ls) 手动复制粘贴它,它 returns True.

谢谢

ps: 问题不完全在于那个文件名,而是几个包含特殊字符(即 í、á、é、ó、ñ)的文件名

我认为这是因为 Unicode 中的一些变音符号有重复。也就是说,虽然有些字符看起来相同,但它们可能是具有不同代码的不同字符。通过编写 á 尝试 'á'.encode() 一次,然后像您一样通过复制粘贴再次尝试。如果字节看起来不同,那是因为它们是看起来相同的不同字符。

您可以在比较它们之前规范化文件列表。

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