2011-10-21 100 views
2

我不是一個unicode專家,我讀了類似的文章沒有任何確鑿的解決方案。我需要一個片段來閱讀一些希臘字符的文件。我的檔案的名稱一樣用希臘文件名讀取文件

20.10.2011 Ισοζύγιο Πληρωμών- Αύγουστος 2011.xls

我有產生的文件名發電機功能:

# -*- coding:utf-8 -*- 
import os 
import glob 

def filesInDir(directory, mask='*.*'): 
    for root, dir, files in os.walk(directory): 
     for file in glob.glob(os.path.join(root, mask)):    
      yield file 

調用此:

for file in filesInDir(directory=r'.'): 
    with open(file,'r') as f: 
     print f 

IOError: [Errno 22] invalid mode ('r') or filename: '.\\20.10.2011 ?s?????? ?????\xb5??- ?????st?? 2011.xls' 

如何使用這些文件名創建有效的文件對象?

回答

5

您需要確保您使用Unicode字符串呼叫os.walk(),否則它將悄悄地將非ASCII字母更改爲ASCII(或將它們更改爲?,如您所見)。

所以做

for file in filesInDir(directory=u'.'): 
    with open(file,'r') as f: 
     print f 

def filesInDir(directory, mask=u'*.*'): 
    for root, dir, files in os.walk(directory): 
     for file in glob.glob(os.path.join(root, mask)):    
      yield file 

參見this similar question

+0

不要忘記也要更改'mask'。 –

+0

@MarkRansom:對。謝謝你指點我。 –

+0

@TimPietzcker:微妙!謝謝 –

相關問題