0

如果它们符合某些条件,我正在尝试从文件中提取某些行。具体来说,列 [3] 需要以 Chr3: 开头,列 [13] 需要为“是”。

以下是匹配和不匹配条件的行示例:

XLOC_004170   XLOC_004170 -   Ch3:14770-25031 SC_JR32_Female  SC_JR32_Male    OK  55.8796 9.2575  -2.59363    -0.980118   0.49115 0.897554    no
XLOC_004387   XLOC_004387 -   Ch3:3072455-3073591 SC_JR32_Female  SC_JR32_Male    OK  0   35.4535 inf -nan    5e-05   0.0149954   yes

我使用的python脚本是:

with open(input_file) as fp: # fp is the file handle
    for line in fp: #line is the iterator
        line=line.split("\t")
        locus = str(line[3])
        significance = str(line[13])
        print(locus)
        print(significance)

        if (re.match('Chr3:[0-9]+-[0-9]+',locus,flags=0) and re.match('yes',significance,flags=0)):
            output.write(("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n")%(line[0],line[1],line[2],line[3],line[4],line[5],line[6],line[7],line[8],line[9],line[10],line[11],line[12],line[13]))

如果有人能解释为什么这个脚本没有返回输出,我将不胜感激。

4

2 回答 2

3

您不需要正则表达式来进行这种简单的检查。更好地使用startswith()==

if locus.startswith('Chr3:') and significance == 'yes':

UPD:您需要在 if 条件之前应用strip()locus变量significance

locus = str(line[3]).strip()
significance = str(line[13]).strip()
于 2013-09-08T18:16:44.833 回答
3

真的没有理由在这里使用正则表达式:

with open(input_file) as handle:
    for line in handle:
        cells = line.split('\t')

        locus = cells[2]
        significance = cells[12]

        if locus.startswith('Ch3:') and significance == 'yes':
            output.write('\t'.join(cells) + '\n')
于 2013-09-08T18:18:31.603 回答