os.listdir返回带有特殊字符的文件名的奇怪字符串

问题描述 投票:2回答:2

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

((这里#线代表输出)

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

每个人似乎都可以,但是如果我写

'á.csv' in ls
# False

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

谢谢

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

python special-characters google-colaboratory listdir
2个回答
1
投票

您可以在比较文件列表之前对其进行标准化。

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

1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.