Хорошо, вот код
from collections import deque
from cyvcf2 import VCF, Writer
import numpy
import glob
for file in glob.glob('test.vcf'):
vcf = VCF(file)
sample_name = file.split('.')[0]
out = "{}.StartPurged.vcf".format(sample_name)
pile = "{}.startStop.pileup".format(sample_name)
w = Writer(out, vcf)
for v in vcf:
cache = deque(maxlen=100)
full_list = []
with open(pile, "r") as pileup:
for line in pileup:
fields = line.split('\t')
cache.append(fields)
if fields[0] == v.CHROM and (v.start -1) == fields[1]:
break
# once you reach your condition
# you can grab the next 100 lines as well
full_list = list(cache)
for i, line in enumerate(pileup):
if i < 100:
full_list.append(line.split('\t'))
else:
break
for x in range(len(full_list)):
print (full_list[x])
Единственная проблема в том, что распечатанный список не тот, который я хочу, в файле примера, который я даю, есть строка на chromosome_1 и мой код напечатайте строки из chromosome_33, 34, 35. Теперь это важно, потому что мои хромосомы упорядочены, а те, 33, 34, 35 - последние и представляют собой небольшие фрагменты. Таким образом, сценарий фактически заполняет full_list до самого конца файла накопления.
И мой пример в виде chromosome_1
Есть идеи, что не так? Прошу прощения за нуб вопросы