Python 2.7、Umlauts、UTF-8和列表

3

我正在尝试使用Python 2.7将一堆文件名中的德语umlauts替换为其他字符。 我使用以下代码获取所有具有umlauts名称的文件列表:

# -*- coding: utf-8 -*-

import os

def GetFilepaths_umlaut(directory):
    file_paths = [] 
    umlauts = ["Ä", "Ü", "Ö", "ä", "ö", "ü"]
    for root, directories, files in os.walk(directory):
        for filename in files:
            filepath = os.path.join(root, filename)
            if any(umlaut in filepath for umlaut in filepath):
                file_paths.append(filepath)
    print file_paths
    return file_paths

GetFilepaths_umlaut(r'C:\Scripts\Replace Characters\Umlauts')

但是当列表被打印到控制台时,它没有打印umlauts(参见截图)。我尝试使用encode(),但出现了第二个截图中显示的错误。我做错了什么?任何反馈都将不胜感激!

enter image description here

使用encode()处理文件路径: 在此输入图片描述


变量 umlauts 似乎没有被使用,可能是由于拼写错误。any(umlaut in filepath for umlaut in filepath) 看起来很可疑。 - skyking
那看起来您获得的文件名是采用ISO 8859-1编码的。您使用的是哪个操作系统? - skyking
是的,你说得对--打字错误。但我仍然得到相同的输出结果。我正在使用Windows 7操作系统。 - Crazy Otto
1个回答

1

print file_paths 打印的是一个列表,而不是字符串。如何显示输出取决于 list 对象的 str() 和/或 unicode() 方法。在这种情况下,它使用转义字符串打印列表的元素:

>>> s = u'a\xe4a'
>>> s
u'a\xe4a'
>>> print s
aäa
>>> [s]
[u'a\xe4a']
>>> print [s]
[u'a\xe4a']

打印实际字符串:

for s in file_paths:
    print s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接