在Python 3中打开文件时出现Unicode错误

时间:2016-12-12 23:56:23

标签: python python-3.x file-io unicode

由于“C:\ Users ...”微软路径名中的“\ U”,我在python 3中尝试打开文件时遇到了一段可怕的时间。我收到错误“SyntaxError :( unicode error)'unicodeescape'编解码器无法解码字节...”

我已经阅读了这个问题的其他答案,提供了以下解决方案:

  1. 加倍\以逃避“\ U”

  2. 的unicode
  3. 使用原始字符串filename = r“C:\ Users ..”

  4. 将\切换到/.

  5. 每当我使用选项1和/或2时,它会使“\”加倍。因此,文件路径是错误的,因为它读取'C:\\ Users \\ ...“而不是'C:\ Users \ ...'

    我正在尝试打开excel文件来处理数据,因此我无法使用选项3,因为我无法更改文件路径。

    当我使用转义符“\”或原始字符串时,有人可以解释为什么“\”会加倍吗?

    我已经尝试了各种选项组合,似乎无法使其发挥作用。

    很抱歉对已经回答的问题提出新问题,但我无法对其他答案发表评论,并且接受的答案对我不起作用。

    由于

2 个答案:

答案 0 :(得分:2)

原始答案应该有效。

选项1:

file_path = "c:\\User\\USER\\SOMETHINGELSE"
print(file_path);

给出:

c:\User\USER\SOMETHINGELSE

斜杠会转义旁边的字符,但不会自行打印。

选项2:

file_path = r"c:\User\USER\SOMETHINGELSE"
print(file_path);

给出:

c:\User\USER\SOMETHINGELSE

r告诉字符串它必须将它作为文字而不使用任何转义字符。

选项3:

好的......所以如果你真的不能使用选项1或2,你可以使用:

import os

file_path = os.path.join(os.path.abspath(os.sep), 'Users', 'USER', 'SOMETHINGELSE')
print(file_path);

在这种情况下&#; os.path.abspath(os.sep)'返回您当前使用的根驱动器。在我的情况下C:\。 ' os.path.join'使用当前系统分隔符连接字符串。在Windows上,这是\。

结果是:

C:\Users\USER\SOMETHINGELSE

但是,当选项1或2应该正常工作时,这是一种奇怪的做事方式。 切记不要一起使用这些选项。如果组合选项1和2,则无法获得正确的结果。使用其中一种。

答案 1 :(得分:0)

如果你有一个带有转义字符的字符串(\)并且Python显示它的repr代表,它将会加倍:

# in the REPL
path = r'C:\Users\Nick'

path 
# 'C:\\Users\\Nick'

print(path)
# C:\Users\Nick

print(repr(path))
# 'C:\\Users\\Nick'

你可能会因为Python打印字符串的表示而不是实际包含的字符串而在REPL中感到困惑。

请注意,您的选择1和2是相同的:

'C:\\Users\\Nick' == r'C:\Users\Nick'
# True

另请注意,如果您输入了无效的转义(例如'\D'),Python将默默地为您更正<{1}}。这将在未来的某个时刻发布a DeprecationWarning in Python 3.6'\\D'