我如何获得 python 中的特定字段
how do i get particular fields in 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
有什么帮助吗?
你快到了。
而不是 prev
只是 id
,让它成为整个最后一行。这让我们检查存在和 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)
如果您的文件中有 header 行,您可以使用 DictReader。
对于 x、y 和 z 列具有 headers 的文件,您可以执行以下操作:
import DictReader
reader = DictReader(open('sample.csv'))
for line in reader:
print(line['x'], line['z'])
它所属的 csv 模块通常非常有用。
我有如下两行
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
有什么帮助吗?
你快到了。
而不是 prev
只是 id
,让它成为整个最后一行。这让我们检查存在和 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)
如果您的文件中有 header 行,您可以使用 DictReader。
对于 x、y 和 z 列具有 headers 的文件,您可以执行以下操作:
import DictReader
reader = DictReader(open('sample.csv'))
for line in reader:
print(line['x'], line['z'])
它所属的 csv 模块通常非常有用。