在Python中处理UTF文件名
我已经读了很多关于这个话题的书,包括这里关于这个话题的权威指南: 也许对于一个更有经验的开发人员来说,这个指南就足够了。然而,在我的情况下,我比刚开始的时候更加困惑,仍然没有解决我的问题 我试图使用os.walk()读取文件名,并在将这些信息写入文本文件之前获取有关文件的某些信息(如文件大小)。只要我没有遇到任何文件名用utf编码的文件,这就行了。当它命中一个utf编码名称的文件时,我会得到如下错误:在Python中处理UTF文件名,python,windows,filenames,utf,Python,Windows,Filenames,Utf,我已经读了很多关于这个话题的书,包括这里关于这个话题的权威指南: 也许对于一个更有经验的开发人员来说,这个指南就足够了。然而,在我的情况下,我比刚开始的时候更加困惑,仍然没有解决我的问题 我试图使用os.walk()读取文件名,并在将这些信息写入文本文件之前获取有关文件的某些信息(如文件大小)。只要我没有遇到任何文件名用utf编码的文件,这就行了。当它命中一个utf编码名称的文件时,我会得到如下错误: WindowsError: [Error 123] The filename, directo
WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: 'Documents\\??.txt'
在这种情况下,文件名为唽咿.txt
到目前为止,我一直在努力做到这一点:
for (root, dirs, files) in os.walk(dirpath):
for filename in files:
filepath = os.path.join(root, filename)
filesize = os.stat(filepath).st_size
file = open(filepath, 'rb')
stuff = get_stuff(filesize, file)
file.close()
如果有必要,dirpath来自代码的早期部分,相当于“dirpath=raw_input()”
我尝试过各种方法,例如将文件路径行更改为:
filepath = unicode(os.path.join(unicode(root), unicode(filename)))
但我试过的都不管用
以下是我的两个问题:
将
unicode
路径传递到os.walk()
在版本2.3中更改:在Windows NT/2k/XP和Unix上,如果路径是Unicode对象,则结果将是Unicode对象列表
对于那些对完整解决方案感兴趣的人:
dirpath = raw_input()
更改为:
dirpath = raw_input().decode(sys.stdin.encoding)
这允许传递给os.walk()的参数采用unicode格式,从而使其返回的文件名也采用unicode格式
要将这些文件写入或从文件写入(我的第二个问题),我使用了codecs.open()功能+1这是一个痛苦的问题-您无法通过便携或正确的方式完成此操作,但您可以进行一些假设,并从中获得大部分信息。(例如,假设linux上的语言环境是正确的,或者windows上的文件系统采用了可以存储所需字符的正确编码,等等)。您似乎在使用windows,如果您将问题缩小到仅限windows,则准确、正确的答案应该是可行的。感谢您对我的两个问题中的一个做出模糊但最终有用的回答。哈,哇。另一个问题的答案当然是,
codecs.open()
。