У меня есть несколько файлов (имен файлов) с несколькими последовательностями чтения (у каждого есть имя чтения, начинающееся с>) в них:
Имя файла1
>Readname1
>Readname2
Имя файла2
>Readname1
>Readname3
Учитывая словарь, который содержит все возможные имена для чтения, подобные этому:
g={}
g['Readname1']=[]
g['Readname2']=[]
g['Readname3']=[]
Как можно написать код, который будет повторять каждый файл и генерировать следующую матрицу:
Filename1 Filename2
Readname1 1 1
Readname2 1 0
Readname3 0 1
Код следует сканировать содержимое каждого файла в каталоге. В идеале я мог бы читать словарь из входного файла, а не жестко закодировать, чтобы я мог генерировать матрицы для разных словарей. Содержание каждого чтения (например, его последовательность гена) не имеет значения, только то, присутствует ли имя чтения в этом файле или отсутствует.
Я только учусь python, поэтому коллега поделился своим кодом, чтобы заставить меня начал. Здесь они создавали матрицу присутствия / отсутствия своего словаря (Readnames) в одном указанном файле (files.txt). Я хотел бы ввести словарь из второго файла (чтобы он не был в коде * stati c) и перебрать несколько файлов.
from Bio import SeqIO
import os
dir_path="" #directory path
files=os.listdir(path=dir_path)
with open(dir_path+'files.txt') as f:
files=f.readlines()
files=[x.strip() for x in files]
enter code here
g={}
g['Readname1']=[]
g['Readname2']=[]
g['Readname3']=[]
for i in files:
a = list(SeqIO.parse(dir_path + i, 'fasta'))
for j in a:
g[j.id].append(i)
print('generating counts...')
counts={}
for i in g.keys():
counts[i]=[]
for i in files:
for j in g:
if i in g[j]:
counts[j].append(1)
else:
counts[j].append(0)
print('writing out...')
outfile=open(dir_path+'core_withLabels.csv','w')
outfile2=open(dir_path+'core_noLabels.csv','w')
temp_string=''
for i in files:
outfile.write(','+i)
temp_string=temp_string+i+','
temp_string=temp_string[:-1]
outfile2.write(temp_string+'\n')
outfile.write('\n')
for i in counts:
outfile.write(i)
temp_string=''
for j in counts[i]:
outfile.write(','+str(j))
temp_string=temp_string+str(j)+','
temp_string=temp_string[:-1]
outfile2.write(temp_string+'\n')
outfile.write('\n')
outfile.close()
outfile2.close()