2015-10-20 33 views
3

我想用Python 2.7來替換德文元音變化中的一堆文件名與其他字符。我使用下面的代碼來獲得在其名稱中的所有文件用變音符號列表:Python 2.7,變音符號,UTF-8和列表

# -*- 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') 

但是當列表打印到控制檯,它不是打印變音(見截圖)。我試過使用編碼(),但得到第二個屏幕截圖中顯示的錯誤。我究竟做錯了什麼?任何反饋非常感謝!

enter image description here

隨着對文件路徑編碼(): enter image description here

+0

要使用的變量'umlauts'似乎沒有,可能是因爲錯字在這種情況下是使用轉義字符串打印列表的元素。 '任何(文件路徑中變音符的文件路徑中的變音符號)'看起來都很可疑。 – skyking

+0

然後它看起來像你在ISO 8859-1編碼的文件名。你在使用哪種操作系統? – skyking

+0

是的,你是對的 - 錯字。儘管如此,仍然獲得相同的打印輸出。我使用Windows 7 –

回答

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 
+0

這對我有用,謝謝! –