繁体   English   中英

从python 2.7.5中的文本文件中提取字符串

[英]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 ,则可以将matchsearch与单词border \\b一起使用

x = "   rs1982171     55349     40802".strip()

if (re.match(r"\b55349\b", x.split()[1])):
    print x

IDEONE演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM