当前位置: 首页 > 面试题库 >

Python无法打开路径中包含非英语字符的文件

程英资
2023-03-14
问题内容

我有一个具有以下路径的文件:D:/ bar / kuレイジー・ヒッツ!/foo.abc

我正在解析XML文件中的路径,并将其存储path在以形式调用的变量中,file://localhost/D:/bar/クレイジー・ヒッツ!/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'

更新1:我在Windows 7上使用Python 2.7


问题答案:

您的错误路径为:

'\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'

我认为这是文件名的UTF8编码版本。

我在Windows7上创建了一个同名文件夹,并在其中放置了一个名为“ abc.txt”的文件:

>>> a = '\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'
>>> os.listdir('.')
['?????\xb7???!']
>>> os.listdir(u'.') # Pass unicode to have unicode returned to you
[u'\u30af\u30ec\u30a4\u30b8\u30fc\u30fb\u30d2\u30c3\u30c4\uff01']
>>> 
>>> a.decode('utf8') # UTF8 decoding your string matches the listdir output
u'\u30af\u30ec\u30a4\u30b8\u30fc\u30fb\u30d2\u30c3\u30c4\uff01'
>>> os.listdir(a.decode('utf8'))
[u'abc.txt']

因此,邓肯的建议似乎可以解决问题path.decode('utf8')

更新资料

我无法为您进行测试,但是建议您在执行之前尝试检查路径是否包含非ascii .decode('utf8')。这有点hacky …

ASCII_TRANS = '_'*32 + ''.join([chr(x) for x in range(32,126)]) + '_'*130
path=path.strip()
path=path[17:] #to remove the file://localhost/  part
path=urllib.unquote(path)
if path.translate(ASCII_TRANS) != path: # Contains non-ascii
  path = path.decode('utf8')
path=urllib.url2pathname(path)


 类似资料:
  • [√]Flutter(频道未知,2.2.0,在Microsoft Windows上[Version 10.0.19041.1052],区域设置ko-KR)•Flutter Version 2.2.0 at C:\users\PC\FVM\Versions\2.2.0•框架版本b22742018b(6周前),2021-05-14 19:12:57-0700•引擎版本a9d88a4d18•飞镖版本2.

  • 问题内容: 如果我有一个打开的文件,是否有调用以字符串的形式获取完整路径? 从,我将如何获得? 问题答案: 此处的键是代表打开文件的对象的属性。你得到这样的: 有帮助吗?

  • 问题内容: 我有一些混合使用英语和没有英语字母的字符串。例如: 如何使用Regex或Python中的其他任何快速方法识别这些类型的字符串? 我不希望将字符串中的字母与字母列表一一比较,而要快速完成。 问题答案: 您只需检查字符串是否只能使用ASCII字符(拉丁字母+其他字符)进行编码。如果它不能被编码,则它具有来自其他字母的字符。 注意评论。它应该在python文件的顶部(否则您会收到一些关于编码

  • 我读了这段代码。正如世外桃源.txt内容使用“测试”。该文件的大小为 4 个字节。如果我使用调试来运行 一次一个字节,每次打开文件后再次打开.txt(用记事本)我依次看到:t--

  • 问题内容: 我在RAD中收到以下错误: 您能否让我知道错误是什么以及如何解决? 问题答案: 索引16处有一个非法字符。我想说它不喜欢路径中的空格。您可以百分比编码特殊字符,例如空格。在这种情况下,将其替换为%20。 我上面链接的问题建议使用URLEncoder:

  • 问题内容: 我正在尝试运行,但始终给我一个错误“ 无法打开包含文件:’config- win.h’ ”。 在我的Mac和另一台Windows机器上,该安装工作正常,但在此机器上却不能。我已经下载了Visual Studio C ++,并尝试同时安装32位和64位。 问题答案: 对于64位Windows 使用滚轮安装 从 http://www.lfd.uci.edu/~gohlke/pythonli