如何在Python中打开一个带有中文名称的文件

3
我正在尝试使用Python中的`open()`函数以“w”模式打开文件。文件名是:仿宋人笔意.jpg。
这个文件名会导致`open()`函数失败,但常规文件则成功。
我该如何在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")

我经常在处理非英文文件名时会遇到“打开文件时出错”的问题。
提前感谢您的帮助。

你尝试过使用codecs.open()吗? - Robus
@Robus:我还没有尝试过codecs.open()。你知道如何使用它吗?我可以Google一下,但如果你能回答的话,那会节省我的时间。 - Mahendra Liya
5个回答

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

这里一切正常


但是Mahendraliya询问的是如何创建一个文件,而不是读取现有文件。 - user18015
1
你所要做的就是用 w 替换 r。 - Robus
5
codecs.open的编码参数是指文件内容的编码,而不是文件名本身的编码。在这里,'utf-8'是无关紧要的,因为我们讨论的是一个图像文件。 - user18015

4
如果您遇到问题,似乎更可能是与您的操作系统或终端配置有关,而不是 Python 本身;即使没有使用 codecs 模块,它对我来说也可以正常工作。
这是一个打开图像文件并将其复制到一个具有您提供的中文名称的新文件的测试的 shell 日志:
$ 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 
$ 

对我来说起作用了,图片是相同的。


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
如果您返回的文件名看起来正确吗?我不确定在到达此代码段之前文件名是否已被破坏。

0

这个:

filename.encode('utf-8') 

尝试将文件名从ascii编码转换为utf-8并导致错误。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接