Python 无法打开路径中包含非英文字符的文件
我有一个具有以下路径的文件:D:/bar/kureeiジー・ヒッツ!/foo.abc
我正在解析 XML 文件中的路径并将其以以下形式存储在名为 path
的变量中file://localhost/D:/bar/kureeiジー・ヒッツ!/foo.abc
然后,正在执行以下操作:
path=path.strip()
path=path[17:] #to remove the file://localhost/ part
path=urllib.url2pathname(path)
path=urllib.unquote(path)
错误是:
IOError: [Errno 2] No such file or directory: 'D:\\bar\\\xe3\x82\xaf\xe3\x83\xac\xe3\x82\xa4\xe3\x82\xb8\xe3\x83\xbc\xe3\x83\xbb\xe3\x83\x92\xe3\x83\x83\xe3\x83\x84\xef\xbc\x81\\foo.abc'
I am using Python 2.7 on Windows 7
I have a file with the following path : D:/bar/クレイジー・ヒッツ!/foo.abc
I am parsing the path from a XML file and storing it in a variable called path
in the form of file://localhost/D:/bar/クレイジー・ヒッツ!/foo.abc
Then, the following operations are being done:
path=path.strip()
path=path[17:] #to remove the file://localhost/ part
path=urllib.url2pathname(path)
path=urllib.unquote(path)
The error is:
IOError: [Errno 2] No such file or directory: 'D:\\bar\\\xe3\x82\xaf\xe3\x83\xac\xe3\x82\xa4\xe3\x82\xb8\xe3\x83\xbc\xe3\x83\xbb\xe3\x83\x92\xe3\x83\x83\xe3\x83\x84\xef\xbc\x81\\foo.abc'
I am using Python 2.7 on Windows 7
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您的错误中的路径是:
我认为这是您的文件名的 UTF8 编码版本。
我在 Windows7 上创建了一个同名的文件夹,并在其中放置了一个名为“abc.txt”的文件:
所以看来 Duncan 的
path.decode('utf8')
建议可以解决问题。更新
我无法为您测试这一点,但我建议您在执行
.decode('utf8')
之前尝试检查路径是否包含非ascii。这有点hacky...The path in your error is:
I think this is the UTF8 encoded version of your filename.
I've created a folder of the same name on Windows7 and placed a file called 'abc.txt' in it:
So it seems that Duncan's suggestion of
path.decode('utf8')
does the trick.Update
I can't test this for you, but I suggest that you try checking whether the path contains non-ascii before doing the
.decode('utf8')
. This is a bit hacky...将文件名作为
unicode
字符串提供给open
调用。你如何产生文件名?
如果您提供为常量,则
在脚本开头附近添加一行:
然后,在支持 UTF-8 的编辑器中,将
path
设置为unicode
文件名:从目录内容列表
使用
unicode
dirspec 检索目录内容:从文本文件中读取
使用
codecs.open
打开包含文件名的文件来读取unicode
数据来自 它。您需要指定文件的编码(因为您知道计算机上非 Unicode 应用程序的“默认 Windows 字符集”是什么)。无论如何,
请执行以下操作:
在打开文件之前;如果不是“utf8”,请替换正确的编码。
Provide the filename as a
unicode
string to theopen
call.How do you produce the filename?
if provided as a constant by you
Add a line near the beginning of your script:
Then, in a UTF-8 capable editor, set
path
to theunicode
filename:read from a list of directory contents
Retrieve the contents of the directory using a
unicode
dirspec:read from a text file
Open the filename-containing-file using
codecs.open
to readunicode
data from it. You need to specify the encoding of the file (because you know what is the “default windows charset” for non-Unicode applications on your computer).in any case
Do a:
before opening the file; substitute the correct encoding if not "utf8".
以下是文档中的一些有趣内容:
如果我理解正确,您应该将文件名作为 unicode 传递:
Here's some interesting stuff from the documentation:
If I understand this correctly, you should pass the file name as unicode: