2011-03-17 52 views
2

我想用「open」()函數在python中以「w」模式打開文件。如何使用python中的中文名稱打開文件

文件名是:仿宋人筆意.jpg。

打開的函數失敗,此文件名但成功與普通文件。

如何打開一個名稱不是英文的Python文件?

我的代碼如下:

try: 
    filename = urllib.quote(filename.encode('utf-8')) 
    destination = open(filename, 'w') 
    yield("<br>Obtained the file reference") 
except: 
    yield("<br>Error while opening the file") 

我總是得到「錯誤打開文件」對非英語文件名。

在此先感謝。

+0

你試過codecs.open()嗎? – Robus 2011-03-17 08:02:50

+0

@Robus:不,我還沒有嘗試過codecs.open()。任何想法如何使用它。我可以谷歌,但如果你能回答,那麼它會節省我的時間。 – 2011-03-17 08:06:30

回答

0

我想修改我的代碼,並改寫了它:

destination = open(filename.encode("utf-8"), 'wb+') 
    try: 
     for chunk in f.chunks(): 
       destination.write(chunk) 
     destination.close() 
    except os.error: 
     yield("Error in Writing the File ",f.name) 

它解決了我的錯誤。

謝謝大家花時間回答。我沒有嘗試上面提到的選項,因爲我可以修復它,但謝謝大家。

0

如果你產生文件名,它看起來是否正確?我不確定在達到這個代碼段之前這個filname是否已經被破壞了。

5
#!/usr/bin/python 
# -*- coding: UTF-8 -*- 
import codecs 
f=codecs.open(u'仿宋人筆意.txt','r','utf-8') 
print f.read() 
f.close() 

工作就好了這裏

+0

但mahendraliya詢問有關創建一個文件,而不是閱讀一個現有的文件。 – 2011-03-17 08:16:24

+1

所有你需要做的就是用r代替r – Robus 2011-03-17 08:19:29

+5

'codecs.open'的編碼參數是指文件內容的編碼,而不是文件名本身的編碼。 'utf-8'在這裏是無關緊要的,因爲我們正在討論一個圖像文件。 – 2011-03-17 08:35:31

0

此:

filename.encode('utf-8') 

試圖從文件名編碼ascii轉換爲utf-8,並導致該錯誤。

3

如果您遇到問題,那麼您的操作系統或終端配置似乎比Python本身更有可能;即使沒有使用編解碼器模塊,它也能正常工作。

這裏有一個測試,打開一個圖像文件,並將它複製到與中國名稱的新文件,你所提供的外殼日誌:

$ ls 
create_file_with_chinese_name.py some_image.png 
$ cat create_file_with_chinese_name.py 
#!/usr/bin/python 
# -*- coding: UTF-8 -*- 

chinese_name_file = open(u'仿宋人筆意.png','wb') 

image_data = open('some_image.png', 'rb').read() 

chinese_name_file.write(image_data) 

chinese_name_file.close() 
$ python create_file_with_chinese_name.py 
$ ls 
create_file_with_chinese_name.py some_image.png    仿宋人筆意.png 
$ diff some_image.png 仿宋人筆意.png 
$ 

爲我工作,該圖像是相同的。