无法去除Python glob返回字符串中的法语字母
我想给文件重命名,这些文件里有法语字母。我正在用一个叫做glob的工具来浏览这些文件,并且找到了一个网上的函数来去掉法语字母。这个叫做supprime_accent
的函数看起来能正常工作。但是,它并没有重命名glob函数返回的文件。
有没有人知道这可能是什么原因呢?这和glob的编码有关吗?
def supprime_accent(ligne):
""" supprime les accents du texte source """
accents = { 'a': ['à', 'ã', 'á', 'â'],
'e': ['é', 'è', 'ê', 'ë'],
'i': ['î', 'ï'],
'u': ['ù', 'ü', 'û'],
'o': ['ô', 'ö'] }
for (char, accented_chars) in accents.iteritems():
for accented_char in accented_chars:
ligne = ligne.replace(accented_char, char)
return ligne
for file_name in glob.glob("attachments/*.jpg"):
print supprime_accent(file_name)
3 个回答
1
我成功解决了这个问题,方法是把文件名转换成使用cp1252编码的unicode格式。
for file_name in glob.glob("attachments/*.jpg"):
file_name = file_name.decode(sys.getfilesystemencoding())
print unicodedata.normalize('NFKD', file_name).encode('ascii','ignore')
补充:Jason提供了一个更好的解决办法,把unicode(file_name, 'cp1252')替换成file_name.decode(sys.getfilesystemencoding())。
1
试试这个问题和它的答案,在问题中我给出了我正在使用的最终解决方案,链接在这里:latin-1 转 ascii
然后把一个unicode字符串传给glob,这样可以得到unicode格式的文件名,比如:
for file_name in glob.glob(u"attachments/*.jpg"):
print file_name.encode('ascii', 'latin2ascii')
2
我看到这里有两个可能的问题。
首先,你需要在你的源代码中使用unicode字符串,并且你需要告诉Python你的源代码使用了什么编码。不幸的是,正确做这件事会让你表格中的元音字母数量翻倍... :-\
# -*- coding: UTF-8 -*-
...
accents = { u'a': [u'à', u'ã', u'á', u'â'],
u'e': [u'é', u'è', u'ê', u'ë'],
u'i': [u'î', u'ï'],
u'u': [u'ù', u'ü', u'û'],
u'o': [u'ô', u'ö'] }
其次,我觉得你需要把glob
返回的文件名转换成unicode字符串。
import sys
file_name = file_name.decode(sys.getfilesystemencoding())
Python 3.0解决了这两个问题:文件名不需要解码,unicode字符串也不需要一个u
标签。