【发布时间】: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 theT` 进行比较。
标签: python regex bioinformatics python-3.7