[英]Extracting a string from a text file in python 2.7.5
您好,我是python的新手,希望您能为我提供帮助。 我有一个文本文件(称为data.txt),其中包含有关基因编号的数据以及相应的rs编号和一些距离度量。 数据看起来像这样:
rs1982171 55349 40802
rs6088650 55902 38550
rs1655902 3105 12220
rs1013677 55902 0
其中第一列是rs号,第二列是基因号,第三列是某种距离度量。 数据要大得多,但是希望上面的内容可以使您对数据集有所了解。 我要做的是找到与某个基因相对应的所有rs号。 例如,对于上面的数据集,基因55902 = {rs6088650,rs1013677}。 理想情况下,我希望我的代码找到与给定基因相对应的所有rs号。 由于我现在无法执行此操作,因此我写了一个简短的代码,该代码给出了data.txt文件中包含字符串“ 55902”的行:
import re
data=open("data.txt","r")
for line in data:
line=line.rstrip()
if re.search("55902",line):
print line
这段代码的问题是输出是这样的:
rs6088650 55902 38550
rs1655902 3105 12220
rs1013677 55902 0
我希望我的代码忽略rs号中的字符串“ 55902”。 换句话说,由于基因编号不是55902,因此我不需要在上述输出中输出第二行代码。我希望输出为:
rs6088650 55902 38550
rs1013677 55902 0
如何修改上面的代码来实现我想要的。 任何帮助,将不胜感激。 提前致谢。
您可以使用单词边界( \\b
)来匹配整个单词搜索:
>>> import re
>>> re.search(r"\b55902\b", "rs1655902 3105 12220")
>>> re.search(r"\b55902\b", "rs6088650 55902 38550")
<_sre.SRE_Match object at 0x7f82594566b0>
if re.search(r"\b55902\b", line):
....
您可以使用功能更强大的正则表达式轻松完成此操作。 一种可能的快速解决方案是使用以下形式的正则表达式:
r'\b55902\b'
\\b
是单词边界。
这里不需要正则表达式,因为您需要的只是一个简单的静态序列。 这行:
if re.search("55902",line):
可以表示为:
if "55902" in line:
如果只想检查第二列,请先分割行:
if '55902' in line.split()[1]:
由于您现在已经检查了正确的列,因此请检查是否相等而不是成员身份:
if line.split()[1] == '55902':
如果要使用regex
,则可以将match
或search
与单词border \\b
一起使用
x = " rs1982171 55349 40802".strip()
if (re.match(r"\b55349\b", x.split()[1])):
print x
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.