读取希腊文文件名的文件

2 投票
1 回答
1296 浏览
提问于 2025-04-17 04:46

我不是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

另外,可以参考 这个类似的问题

撰写回答