тук е моят проблем: започвам от няколко матрици, към които извличам данни, за да изградя нова и обща матрица. Първата стъпка е да прочетете файловете с csv модул и да извлечете стойности на „позиция“ (съхранени в ред [1]), които ще бъдат използвани като заглавки на колони в крайната матрица. Всеки infile съдържа подмножество от общите "позиции", които понякога присъстват в повече от един infile. Така че първо изграждам подреден списък (от по-малко към по-голямо цяло число) от сливането на всички стойности на "позиция", игнорирайки повтарящите се. Ето как го правя:
for infile in glob.glob('passed_*.vcf'):
infilen=open(infile)
inf = csv.reader(infilen,delimiter='\t')
for row in inf:
if row[1] in pos:
continue
else:
pos.append(row[1])
infilen.close()
pos.sort(key=int)
head=str('\t'.join(pos))
of=open('trial.txt', 'a')
print>>of,head
След като направя това, се връщам към оригиналните файлове и чета за друга стойност (в ред [3] този път), която искам да добавя под съответния хедър, създаден по-горе (т.е. „позиция“). Тъй като всеки infile носи подмножество от общите позиции, ще трябва да запълня празнините, когато крайната позиция на матрицата (съхранена в списъка "pos") не присъства в ред [1] на отделния infile. Ето кода, който опитвам:
for infile in glob.glob('passed_*.vcf'):
infilen=open(infile)
inf = csv.reader(infilen,delimiter='\t')
seq=[]
for row in inf:
if row[1] in pos:
seq.append(row[3])
else:
seq.append('N')
Излишно е да казвам, че съм заседнал. Мислех да използвам while цикъл, но тъй като нямам много опит, ви моля за съвет от всякакъв вид.
примерни данни
вход (проба 1):
1 2025 blah A . blah PASS AC=0 GT:DP 0/0:61
2 2027 blah C . blah blah AC=0 GT:DP 0/0:61
3 2028 blah T . blah PASS AC=0 GT:DP 0/0:61
вход (проба n):
1 2025 blah G . blah PASS AC=0 GT:DP 0/0:61
2 2026 blah A . blah blah AC=0 GT:DP 0/0:61
3 3089 blah T . blah PASS AC=0 GT:DP 0/0:61
изход (единична матрица с входен ред[1] като променливи и ред[3] като стойности. всеки ред е различна проба, т.е. различен входен файл):
2025 2026 2027 2028 ... 3089
sample1 A NaN C T NaN
samplen G A NaN NaN T