如何在python中获取特定字段

2024-06-17 08:19:03 发布

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

我有下面两排

Tp1g00130_scaffold_1    blastn    exon    20495    20602    .    +    .    
Tp1g00130_scaffold_1    blastn    exon    20650    20804    .    +    .    

我要做的是合并两行的seq start(第1行的第3列)和seq end(第2行的第4列),如果它们具有相同的ID(第1列)。例如,输出如下

Tp1g00130_scaffold_1    blastn    exon    20495    20804    .    +    .    

我开了一个好头,但不能完全完成。你知道吗

prev = None

with open("test_parse") as fh_in:
    for line in fh_in:
        line = line.strip()
        line = line.split()
        line_id = line[0]
        print line
        if prev is not None and prev == line_id:
            print "yes"
        prev = line_id

有什么帮助吗?你知道吗


Tags: innoneidlinestartseqendscaffold
3条回答

你就快到了。你知道吗

与其prev只是id,不如让它成为最后一行。这允许我们检查existance和id(if prev and prev[0] == line[0]:),并获取seq start和seq end(print('{} -> {}'.format(prev[3], line[4])))。你知道吗

prev = None
with open("test_parse") as fh_in:
    for line in fh_in:
        line = line.strip().split()
        if prev and prev[0] == line[0]:
            print(' '.join(prev).replace(prev[4], line[4]).split())
        prev = line

如果文件中有标题行,可以使用DictReader。你知道吗

对于标题为x、y和z列的文件,可以执行以下操作:

import DictReader

reader = DictReader(open('sample.csv'))
for line in reader:
    print(line['x'], line['z'])

它所属的csv模块通常非常有用。你知道吗

如果你的文件很小,你可以使用一个临时的dict

records = {}

with open("test_parse") as fh_in:
    for line in fh_in:
        id_, f1, f2, start, end, f4, f5, f6 = line.strip().split()
        if id_ in records:
            records[id_][4] = end
        else:
            records[id_] = [id_, f1, f2, start, end, f4, f5, f6]

for line in records.values():
    print "\t".join(line)

相关问题 更多 >