Python';s os.path被希伯来文文件名阻塞
我正在编写一个脚本,它必须移动一些文件,但不幸的是,它似乎不能很好地实现国际化。当我有用希伯来语命名的文件时,就会出现问题。以下是目录内容的屏幕截图:Python';s os.path被希伯来文文件名阻塞,python,internationalization,hebrew,Python,Internationalization,Hebrew,我正在编写一个脚本,它必须移动一些文件,但不幸的是,它似乎不能很好地实现国际化。当我有用希伯来语命名的文件时,就会出现问题。以下是目录内容的屏幕截图: files = os.listdir('test_source') for f in files: pf = os.path.join('test_source', f) print pf, os.path.exists(pf) (来源:) 现在考虑这个目录中的文件: files = os.listdir('test_sou
files = os.listdir('test_source')
for f in files:
pf = os.path.join('test_source', f)
print pf, os.path.exists(pf)
(来源:)
现在考虑这个目录中的文件:
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看起来像是Unicode vs ASCII问题-
os.listdir
正在返回ASCII字符串列表
编辑:我在Python3.0上试过,也在XPSP2上试过,并且os.listdir
只是省略了希伯来文文件名,而没有列出它们
根据文件,这意味着它无法解码:
请注意,当os.listdir()返回
无法删除的字符串、文件名列表
正确地解码是省略的,而不是省略
而不是提出错误
在OS X上使用Python 2.5.1,它就像一个魔咒:
subdir/bar.txt True
subdir/foo.txt True
subdir/עִבְרִית.txt True
也许这意味着这与Windows XP有关
编辑:我还尝试使用unicode字符串来更好地模拟Windows行为:
for f in os.listdir(u'subdir'):
pf = os.path.join(u'subdir', f)
print pf, os.path.exists(pf)
subdir/bar.txt True
subdir/foo.txt True
subdir/עִבְרִית.txt True
在终端(os x stock命令提示符应用程序)中,即。使用IDLE仍能正常工作,但无法正确打印文件名。为了确保它确实是unicode,我检查了:
>>>os.listdir(u'listdir')[2]
u'\u05e2\u05b4\u05d1\u05b0\u05e8\u05b4\u05d9\u05ea.txt'
嗯,在向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)
==>
以下是一些重要的观察结果:
- Windows XP(与所有NT衍生产品一样)以unicode存储所有文件名
(以及类似的函数,如os.listdir
)应该传递一个unicode字符串,以便正确使用unicode路径。以下是上述链接中的一段话:os.walk
- 最后,
需要ascii字符串,而不是unicode,因此路径必须编码为asciiprint