2013-04-05 73 views
3

我们很多人都可能遇到这个问题,但我在unicode处理方面很差。这里是问题: 这是一个代码片段,我想执行.exe文件,检查文件路径是否存在,但没有运气:python中非英文文件名的文件操作

#Python 2.6.7 

filePath = 'C:\\Test\\' # Test folder haveing file BitComet_比特彗星_1_25.exe 

for (adir, dirs, files) in os.walk(rootdir): 
    for f in files: 
     path = os.path.join(adir,f) 
     if os.path.exists(path): 
      print'Path Found',path 
      #Extract file 
      #logging(path) 
     else: 
      print 'Path Not Found' 
      #logging(path) 

我总是得到结果“路径不发现”。我试图用path.decode(“UTF-8”):
但脚本读取文件路径为:

C:\Test\BitComet_????_1_25.exe  

而且,由于该文件路径不存在,它关系到else分支。

请给我一个提示,以处理此unicode问题,以及它是否更好,如果我能够显示用户在cmd或日志文件中显示文件路径。

我很抱歉,如果这似乎是一个重复的职位。

回答

4

Windows路径以UTF-16编码。 Python可以处理这个问题对你来说,简单地传递一个的unicode路径os.walk(),你会得到Unicode的结果,而不是:

filePath = u'C:\\Test\\' # Test folder haveing file BitComet_比特彗星_1_25.exe 

for (adir, dirs, files) in os.walk(filePath): 
+0

真棒它的工作原理,当我试图打印路径它给错误多了一个小问题 UnicodeEncodeError:'charmap'编解码器无法编码位置55-58中的字符:字符映射到 如何处理它? – Shashi 2013-04-05 12:13:46

+2

这是因为Windows控制台在打印unicode时非常糟糕。请参阅[Python,Unicode和Windows控制台](http://stackoverflow.com/q/5419) – 2013-04-05 12:14:30

+0

非常感谢分享链接。 – Shashi 2013-04-05 12:15:45