Python根据列上按优先级排列的子字符串从表中选择一行

2024-04-27 04:29:57 发布

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

我被这个问题困扰了一段时间,所以我想我可能会寻求帮助

我有一系列文件,每个文件的结构如下:

I:8859_VEP  upstream_gene_variant   Y74C9A.2a.1
I:8859_VEP  upstream_gene_variant   Y74C9A.2a.2
I:8859_VEP  frameshift_variant  Y74C9A.2a.2
I:8859_VEP  upstream_gene_variant   Y74C9A.2a.3
I:8859_VEP  intron_variant  Y74C9A.2a.3
I:8859_VEP  downstream_gene_variant Y74C9A.6
I:8859_VEP  upstream_gene_variant   Y74C9A.2a.4
I:8859_VEP  upstream_gene_variant   Y74C9A.2a.5
I:8859_VEP  upstream_gene_variant   Y74C9A.2b
I:8859_VEP  upstream_gene_variant   Y74C9A.6
I:8859_VEP  downstream_gene_variant Y74C9A.6

对于每个文件,我只需要根据第二列值的优先级打印一行,在本例中,我希望使用“frameshift_variant”打印该行;然而,如果没有任何“移码变体”,它应该打印“插入变体”,等等

我试过:

with open('table.csv', 'r') as f:

    for line in f:
        line = line.strip("\n")
        lin = line.split("\t")

        if lin[1] == "frameshift_variant":
            print(line)
            break
        else:
            if lin[1] == "intron_variant":
                print(line)
                break
            else:
                if lin[1] == "upstream_gene_variant":
                    print(line)
                    break

非常感谢任何愿意回复的人


Tags: 文件ifline变体elseprintvariantgene
0条回答
网友
1楼 · 发布于 2024-04-27 04:29:57

试着改变

lin = line.split("\t") 

为了

lin = line.split()

似乎这与csv的结构有关

网友
2楼 · 发布于 2024-04-27 04:29:57

您必须浏览整个文件并保留具有最佳第二个字段的行。假设顺序为“移码变体”、“内含子变体”, “上游基因变体”、“下游基因变体”,您可以执行以下操作:

with open('table.csv', 'r') as f:
    order = [ 'frameshift_variant', 'intron_variant',
          'upstream_gene_variant', 'downstream_gene_variant' ]
    cur = len(order)          # start with a value that will lose
    bestline = None
    for line in f:
        line = line.strip()             # clean up
        row = line.split('\t')
        index = order.index(row[1])     # find order of second field
        if index < cur:                 # if better than current
            cur = index                 # store it
            bestline = line
    print(bestline)                     # display best line at end of file

注:这假设文件实际上是一个制表符分隔的文件

相关问题 更多 >