вот моя проблема: я начинаю с нескольких матриц, в которые извлекаются данные для построения новой и общей матрицы. Первым шагом является чтение входных файлов с помощью модуля csv и извлечение значений «позиции» (хранящихся в строке [1]), которые будут использоваться в качестве заголовков столбцов в окончательной матрице. Каждый файл содержит подмножество общих «позиций», которые иногда присутствуют более чем в одном файле. Итак, я прежде всего строю упорядоченный список (от меньшего к большему целому) из слияния всех значений «позиции», игнорируя повторяющиеся. Вот как я это делаю:
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]), которое я хочу добавить под соответствующим заголовком, созданным выше (то есть «позицией»). Поскольку каждый файл имеет подмножество общих позиций, мне придется заполнить пробелы, когда конечная позиция матрицы (хранящаяся в списке «pos») отсутствует в строке [1] отдельного файла. Вот код, который я пытаюсь:
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