由于“C:\ Users ...”微软路径名中的“\ U”,我在python 3中尝试打开文件时遇到了一段可怕的时间。我收到错误“SyntaxError :( unicode error)'unicodeescape'编解码器无法解码字节...”
我已经阅读了这个问题的其他答案,提供了以下解决方案:
加倍\以逃避“\ U”
使用原始字符串filename = r“C:\ Users ..”
将\切换到/.
每当我使用选项1和/或2时,它会使“\”加倍。因此,文件路径是错误的,因为它读取'C:\\ Users \\ ...“而不是'C:\ Users \ ...'
我正在尝试打开excel文件来处理数据,因此我无法使用选项3,因为我无法更改文件路径。
当我使用转义符“\”或原始字符串时,有人可以解释为什么“\”会加倍吗?
我已经尝试了各种选项组合,似乎无法使其发挥作用。
很抱歉对已经回答的问题提出新问题,但我无法对其他答案发表评论,并且接受的答案对我不起作用。
由于
答案 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'
。