读取希腊文文件名的文件
我不是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'
我该如何使用这些文件名创建一个有效的文件对象呢?
1 个回答
5
你需要确保在调用 os.walk()
时使用的是Unicode字符串,否则它会默默地把非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
另外,可以参考 这个类似的问题。