簡體   English   中英

我如何獲取python中的特定字段

[英]how do i get particular fields in python

我有兩行如下

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

我想做的是如果兩行具有相同的ID(第1列),則合並兩行的seq起始(第1列的第3列)和seq結束(第2列的第4列)。 例如,輸出看起來像

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

有什么幫助嗎?

你快到了。

不僅僅是previd ,而是使它成為最后一行。 這使我們可以檢查是否存在和id( if prev and prev[0] == line[0]: :)並獲得seq開始和seq結束( 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

如果文件很小,則可以使用臨時字典。

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)

如果文件中有一個標題行,則可以使用DictReader

對於標題為x,y和z列的文件,您可以執行以下操作:

import DictReader

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

它的一部分csv模塊通常非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM