【问题标题】:What causes Python error 'bad escape \C'?是什么导致 Python 错误“错误转义\C”?
【发布时间】:2018-11-16 05:17:05
【问题描述】:

我刚刚编写了一个函数,它将查看一个文本文件并计算文本文件中所有 True 和 False 的实例。这是我的文件

ATOM     43  CA  LYS A   5      14.038  15.691  37.608  1.00 15.15           C      True
ATOM     52  CA  CYS A   6      16.184  12.782  38.807  1.00 16.72           C      True
ATOM     58  CA  GLU A   7      17.496  12.053  35.319  1.00 14.06           C      False
ATOM     67  CA  VAL A   8      18.375  15.721  34.871  1.00 12.27           C      True
ATOM     74  CA  PHE A   9      20.066  15.836  38.288  1.00 12.13           C      False
ATOM     85  CA  GLN A  10      22.355  12.978  37.249  1.00 12.54           C      False

这是我的代码

def TFCount(txtFileName):   
    with open(txtFileName, 'r') as e:
        T = 0
        F = 0
        for record in e:
            if(re.search(r'^ATOM\s+\d+\s+\CA\s+\w+\s+\w+\s+\d+\s+\d+\.\d+\s+\d+\.\d+\s+\d+\.\d+\s+\d+\.\d+\s+\d+\.\d+\s+\w+\s+\T', record)):
                T += 1
            else:
                F += 1
        print(T)
        print(F)

如果我的正则表达式冗长且阅读起来乏味,我深表歉意,但这是我知道的计算文件中 True 出现次数的唯一方法。可以看到,程序每次遇到True,都会给变量T加1,否则就给变量False加1。尝试运行程序后,解释器返回错误:bad escape \C。这个错误是什么意思?我的代码中是什么原因造成的?

【问题讨论】:

  • 为什么要逃避C?没有\C 正则表达式转义。从 Python 3.6 开始,这被视为错误。以前,它会被解析为C。这看起来像是你的错字。
  • 不是转义序列\C。大多数引擎只会将其作为通行证进行转义,但显然不是 Python。或者,它可能是来自解释器的消息。
  • 你真的需要准确地解析这一行吗?似乎'^ATOM.{80}T' 也能正常工作并且更容易理解。
  • @MarkRansom 有一个很好的观点。 PDB 文件根据定义具有固定列,因此只需检查某个列的值是正确的。事实上,一对substr 和等式可以解决问题,而不必依赖正则表达式。提取第 1-6 列并与 ATOM 进行比较,提取第 13-16 列并在其自己的列 (wwpdb.org/documentation/file-format-content/format33/…) 中与`CA . If it is the expected line, check for the T` 进行比较。

标签: python regex bioinformatics python-3.7


【解决方案1】:

你在正则表达式的第一部分有\C

r'^ATOM\s+\d+\s+\CA

你应该只写 CA

r'^ATOM\s+\d+\s+CA

没有转义。

稍后你和\T 一样。

\X 表示转义 X 并且大多数时候是正则表达式中的特殊序列,例如\d 代表数字或\s 代表空格。

【讨论】:

  • 如果我将它作为路径变量值示例的一部分怎么办:re.sub(x[0],rdstpath,path)
  • 这个变量的值是多少?
  • 它可以是路径 '\something' 中的任何内容,就我而言,我的文件夹以大写字母开头
  • 你可以使用re.escape来准备值
猜你喜欢
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 2011-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多