【问题标题】:Unicode error when opening a file in Python 3在 Python 3 中打开文件时出现 Unicode 错误
【发布时间】:2017-04-27 22:56:02
【问题描述】:

由于“C:\Users...”Microsoft 路径名中的“\U”,我一直在尝试在 python 3 中打开一个文件。我收到错误“SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes...”

我已阅读提供以下解决方案的此问题的其他答案:

  1. 将 \ 加倍以转义“\U”的 unicode

  2. 使用原始字符串文件名 = r"C:\Users.."

  3. 将 \ 切换为 /。

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

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

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

我已经尝试了所有选项组合,但似乎无法让它发挥作用。

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

谢谢

【问题讨论】:

  • 您是一起尝试还是分别尝试 1 和 2?你真的试过 3 吗?
  • 从“\”切换到“/”时实际上并没有改变路径,它甚至是pwd>>> os.system("pwd") /Users/omer/Dropbox/school/16_fall的默认格式
  • 我已经尝试了所有组合,但为了回答您的问题,我主要是分别尝试了它们。我会发布我正在做的事情的输出,这样你就知道我看到了什么
  • 'C:\\Users\David\Desktop\mlb_stats_5AUG2016' 返回 '\\Users\\David\\Desktop\\mlb_stats_5AUG2016'
  • 选项 1 和 2 中的双斜线没有错。只是您正在交互式控制台上查看字符串的repr,它显示了您在输入字符串时需要重新创建字符串的转义。尝试执行print(escaped_string),您将看不到转义,因为print 向您显示字符串的人性化版本,没有转义。

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


【解决方案1】:

原始答案应该有效。

选项 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

But, that is a strange way of doing things when option 1 or 2 should work fine. 记住不要一起使用这些选项。如果结合选项 1 和 2,您将不会得到正确的结果。使用其中一种。

【讨论】:

    【解决方案2】:

    如果你有一个带有转义字符的字符串 (\),而 Python 显示它是 representation,它看起来会加倍:

    # in the REPL
    path = r'C:\Users\Nick'
    
    path 
    # 'C:\\Users\\Nick'
    
    print(path)
    # C:\Users\Nick
    
    print(repr(path))
    # 'C:\\Users\\Nick'
    

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

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

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

    另请注意,如果您输入了无效的转义符(例如 '\D'),Python 会默默地为您更正此错误为 '\\D'。这将在未来某个时候发出a DeprecationWarning in Python 3.6SyntaxError

    【讨论】:

      猜你喜欢
      • 2020-11-27
      • 1970-01-01
      • 2021-08-11
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2020-11-19
      相关资源
      最近更新 更多