当前位置:  开发笔记 > 编程语言 > 正文

Python的os.path阻塞了希伯来文件名

如何解决《Python的os.path阻塞了希伯来文件名》经验,为你挑选了1个好方法。

我正在编写一个脚本,必须移动一些文件,但不幸的是它似乎并没有os.path很好的国际化.当我有希伯来语命名的文件时,有问题.这是目录内容的屏幕截图:

替代文字
(来源:thegreenplace.net)

现在考虑这个代码遍历此目录中的文件:

files = os.listdir('test_source')

for f in files:
    pf = os.path.join('test_source', f)
    print pf, os.path.exists(pf)

输出是:

test_source\ex True
test_source\joe True
test_source\mie.txt True
test_source\__()'''.txt True
test_source\????.txt False

注意如何os.path.exists认为希伯来语命名的文件甚至不存在?我怎样才能解决这个问题?

Windows XP Home SP2上的ActivePython 2.5.2



1> Eli Bendersk..:

嗯,经过一些挖掘后,似乎在为os.listdir提供一个unicode字符串时,这种方法有效:

files = os.listdir(u'test_source')

for f in files:

    pf = os.path.join(u'test_source', f)
    print pf.encode('ascii', 'replace'), os.path.exists(pf)

===>

test_source\ex True
test_source\joe True
test_source\mie.txt True
test_source\__()'''.txt True
test_source\????.txt True

这里的一些重要观察:

Windows XP(与所有NT衍生产品一样)将所有文件名存储在unicode中

os.listdir(和类似的函数一样os.walk)应该传递一个unicode字符串,以便与unicode路径一起正常工作.以下是上述链接的引用:

os.listdir(),它返回文件名,引发了一个问题:它应该返回Unicode版本的文件名,还是应该返回包含编码版本的8位字符串?os.listdir()将执行这两个操作,具体取决于您是将目录路径提供为8位字符串还是Unicode字符串.如果传递Unicode字符串作为路径,则将使用文件系统的编码对文件名进行解码,并返回Unicode字符串列表,而传递8位路径将返回文件名的8位版本.

最后,print想要一个ascii字符串,而不是unicode,所以路径必须编码为ascii.

推荐阅读
手机用户2402851155
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有