我不是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'
如何使用这些文件名创建有效的文件对象?
答案 0 :(得分:5)
您需要确保使用Unicode字符串调用os.walk()
,否则它将静默地将非ASCII字母更改为ASCII(或者如您所见,将其更改为?
。)< / p>
所以
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