使用希腊文件名读取文件

Ηλί*_*ίας 2 python unicode

我不是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
Run Code Online (Sandbox Code Playgroud)

打电话给:

for file in filesInDir(directory=r'.'):
    with open(file,'r') as f:
        print f
Run Code Online (Sandbox Code Playgroud)

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

如何使用这些文件名创建有效的文件对象?

Tim*_*ker 5

您需要确保os.walk()使用Unicode字符串进行调用,否则它将以静默方式将非ASCII字母更改为ASCII(或者将其更改?为您所观察到的).

那样做

for file in filesInDir(directory=u'.'):
    with open(file,'r') as f:
        print f
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

另见这个类似的问题.