我似乎无法打开具有Unicode文件名的文件。可以说我这样做:

for i in os.listdir():
    open(i, 'r')

当我尝试寻找解决方案时,总是会看到有关如何向文件读写unicode字符串的页面,而不是有关如何使用具有unicode名称的file()open()打开文件的页面。

最佳答案

只需为文件名传递open()一个unicode字符串:

在Python 2.x中:

>>> open(u'someUnicodeFilenameλ')
<open file u'someUnicodeFilename\u03bb', mode 'r' at 0x7f1b97e70780>

在Python 3.x中,所有字符串都是Unicode,因此实际上没有任何内容。

与往常一样,请注意,打开文件的最佳方法始终是将 with statementopen()结合使用。

编辑:关于os.listdir()的建议再次有所不同,在Python 2.x下,您必须小心:



Source

简而言之,如果您要使用Unicode,请将Unicode放入:
>>> os.listdir(".")
['someUnicodeFilename\xce\xbb', 'old', 'Dropbox', 'gdrb']
>>> os.listdir(u".")
[u'someUnicodeFilename\u03bb', u'old', u'Dropbox', u'gdrb']

请注意,该文件仍会以任何一种方式打开-由于它将是8位字符串,因此无法在Python中很好地表示,但仍然可以使用。
open('someUnicodeFilename\xce\xbb')
<open file 'someUnicodeFilenameλ', mode 'r' at 0x7f1b97e70660>

在3.x下,一如既往,它始终是Unicode。

10-07 19:26
查看更多