我有两排,如下所示
Tp1g00130_scaffold_1 blastn exon 20495 20602 . + .
Tp1g00130_scaffold_1 blastn exon 20650 20804 . + . 我想要做的是合并两行的start (第1行的第3列)和seq结束(第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有什么帮助吗?
发布于 2015-03-12 21:33:23
你快到了。
与其prev仅仅是id,不如把它作为最后一行。这允许我们检查存在性和id (if prev and prev[0] == line[0]:),并获得start和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发布于 2015-03-12 21:40:42
如果您的文件很小,您可以使用临时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)发布于 2015-03-12 21:50:55
如果文件中有标题行,则可以使用DictReader。
对于具有x、y和z列标题的文件,可以这样做:
import DictReader
reader = DictReader(open('sample.csv'))
for line in reader:
print(line['x'], line['z'])它是csv模块的一部分,在一般情况下是非常有用的。
https://stackoverflow.com/questions/29020394
复制相似问题