簡體   English   中英

用unicode文件名打開文件?

[英]open file with a unicode filename?

我似乎無法打開具有unicode文件名的文件。 讓我們說:

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

當我嘗試搜索某些解決方案時,我總是得到關於如何讀取和寫入unicode字符串到文件的頁面,而不是如何使用具有unicode名稱的file()open() file()

只需傳遞open()一個unicode字符串作為文件名:

在Python 2.x中:

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

在Python 3.x中,所有字符串都是Unicode,因此幾乎沒有任何字符串。

與往常一樣,請注意打開文件的最佳方法是始終將with語句open()結合使用。

編輯:關於os.listdir() ,建議再次變化,在Python 2.x下,你必須小心:

os.listdir(),它返回文件名,引發了一個問題:它應該返回Unicode版本的文件名,還是應該返回包含編碼版本的8位字符串? os.listdir()將執行這兩個操作,具體取決於您是將目錄路徑提供為8位字符串還是Unicode字符串。 如果傳遞Unicode字符串作為路徑,則將使用文件系統的編碼對文件名進行解碼,並返回Unicode字符串列表,而傳遞8位路徑將返回文件名的8位版本。

資源

簡而言之,如果你想要Unicode輸出,請將Unicode放入:

>>> os.listdir(".")
['someUnicodeFilename\xce\xbb', 'old', 'Dropbox', 'gdrb']
>>> os.listdir(u".")
[u'someUnicodeFilename\u03bb', u'old', u'Dropbox', u'gdrb']

請注意,該文件仍將以任何方式打開 - 它不會在Python中很好地表示,因為它將是一個8位字符串,但它仍然可以工作。

open('someUnicodeFilename\xce\xbb')
<open file 'someUnicodeFilenameλ', mode 'r' at 0x7f1b97e70660>

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

你可以試試這個:

import os
import sys

for filename in os.listdir(u"/your-direcory-path/"):
  open(filename.encode(sys.getfilesystemencoding()), "r")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM