匹配每个lin的元素

2024-05-23 16:43:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个函数的给定输入文件的规则列表。如果在给定的文件中有任何违反,我希望程序返回错误消息并退出。在

  • 文件中的每个基因都应该在同一条染色体上

因此,对于以下线路:

邮编:001003443 chr11+5997152 5927598 5921052 5926098 1 59287525925972,59272045396098, NM_001003444 chr11+5925152 5926098 5925152 5926098 2 5925152925652,59254045926098, NM_001003489 chr11+5925145 5926093 5925115 5926045 4 592515159255762,59874045908098, 等等

文件中的每一行都是这一行的变体

因此,我要确保文件中的每一行都在chr11上

不过,我可能会得到一个文件,上面有不同的chr列表(以及任意数量的数字)。因此,我要确保在这一行找到的任何一个数都是相同的。在

我应该为此使用正则表达式,还是应该怎么做?顺便说一下,这是python语言。在

例如:chr\d+? 我不确定如何确保匹配的每一行都是相同的。。。在

我目前有:

from re import *
for line in file:
    r = 'chr\d+'
    i = search(r, line)
    if i in line:

但我不知道如何确保每一行都是一样的。。。在

参考sajattack的回答

^{pr2}$

Tags: 文件函数in程序消息列表规则错误
3条回答

只需读取该文件并对每一行进行while循环检查,以确保它包含chr11。有一些字符串函数可以在字符串中搜索子字符串。一旦找到返回false(不包含chr11)的行,就跳出循环并设置一个标志valid = false。在

import re

fp = open(infile, 'r')
fp.readline()
tar = re.findall(r'chr\d+', fp.readline())[0]
for line in fp:
    if (line.find(tar) == -1):
        print("Not valid")
        break

这应该在行中搜索一个数字并检查其有效性。在

假设第一个chr是正确的吗?如果是,请使用以下方法:

import re
chrlist = re.findall("chr[0-9]+",  open('file').read())
# ^ this is a list with all chr(whatever numbers)
for chr in chrlist:
    if chr != chrlist[0]
        print("Chr does not match")
        break

“从我的组收集匹配的数字”字符串。在

import re

pat = re.compile(r'\schr(\d+)\s')

def chr_val(line):
    m = re.search(pat, line)
    if m is not None:
        return m.group(1)
    else:
        return ''

def is_valid(f):
    line = f.readline()
    v = chr_val(line)
    if not v:
        return False

    return all(chr_val(line) == v for line in f)

with open("test.txt", "r") as f:
    print("The file is {0}".format("valid" if is_valid(f) else "NOT valid"))

注意事项:

  • 预编译用于速度的正则表达式。

  • 使用原始字符串(r'')指定正则表达式。

  • 模式要求在chr字符串的任一侧有空格(\s)。

  • 如果第一行没有好的chr值,则is_valid()返回{}。然后它返回一个布尔值,如果下面的所有行都与第一行的chr值匹配,则该值为true。

  • 您的示例代码只打印了The file is True这样我就更友好了。

相关问题 更多 >