【问题标题】:Python - Numbers change when included in a directory stringPython - 包含在目录字符串中时数字会发生变化
【发布时间】:2015-06-28 12:00:51
【问题描述】:

我在网上搜索过,似乎找不到任何其他实例。为什么 2015 变成 x815,我该如何补救?

>>> os.chdir("N:\PRTR\Weekly Estimate\2015")

Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    os.chdir("N:\PRTR\Weekly Estimate\2015")
WindowsError: [Error 2] The system cannot find the file specified: 'N:\\PRTR\\Weekly Estimate\x815'

【问题讨论】:

标签: python string directory numbers


【解决方案1】:

实际上,在 Python 中,“\”是字符串中的转义字符,所有特殊字符都是由“\”后跟一个或多个其他特定字符创建的。例如,字符串中的"\n" 是换行符。

碰巧的是,后跟三位数字的“\”表示三位八进制字符。 "\201" 恰好对应八进制字符 �,对于无法打印它的终端,它可能会以十六进制数字 x81 的形式出现。

为避免这种情况,请将字母 r 放在引号外的前面,使您的字符串成为原始字符串,如下所示

print r'N:\PRTR\Weekly Estimate\2105'

r 将使 Python 完全按照你输入的方式解释字符串,忽略所有特殊字符和转义序列,你会得到你想要的结果。

【讨论】:

  • 什么文本编辑器? :) 我猜你的意思是text terminal。 FWIW,\201 == \x81 在某些8-bit extensions to ASCII 中被视为控制字符,但某些code pages 为其分配了字形。
  • 哎呀!你是绝对正确的!我在想终端,然后输入编辑器。我已经醒了很长时间。修好了。
【解决方案2】:

实际上\x 是转义序列,意味着接下来的两个字符被解释为十六进制数字。

所以你会有:

>>> '\2015'
'\x815'

为了摆脱它,你需要逃离\

>>> print '\\2015'
\2015

【讨论】:

  • 如果你不想逃避一切,你可以使用 raw_string,print r'\2015'
  • @lapinkoira 是的,这是另一种方式!
  • 哇,现在看起来很明显......谢谢大家!
  • @JackSellers 欢迎您!您也可以通过投票接受答案来告诉社区;)
猜你喜欢
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 2017-03-16
  • 1970-01-01
  • 1970-01-01
  • 2020-06-20
  • 2012-10-24
  • 1970-01-01
相关资源
最近更新 更多