Cargue datos de un archivo a otro en función de la parte coincidente en dos archivos.
Entrada1
>Aa,Ab,Ac,ET0001
>Ba,Bb,Bc,ET0002
>Ca,Cb,Cc,ET0003
Entrada2
>Infor_a, aa:dfkvl, bb:csd, cc:ET0001
sldcksdlksjelkjfslkdjflskdjflskd
sldkcmowdimnwo
>Infor_b, aa:coeq, bb:ock, cc:ET0056
lskdjocisnmodk
>Infor_c, aa:vwjm, bb:cxj, cc:ET0751
spodcisdokfmnwoke
woeinmfwoeinflsdkvm
sldknmflwkenmlwk
>Infor_d, aa:wokx, bb:rkx, cc:ET0003
sodicjsodijsoi
Salida esperada
>Aa,Ab,Ac,ET0001
sldcksdlksjelkjfslkdjflskdjflskd
sldkcmowdimnwo
>Ba,Bb,Bc,ET0002
NaN
>Ca,Cb,Cc,ET0003
sodicjsodijsoi
Código
with open(input1, 'r') as fr1, open(input2, 'r') as fr2, open(output, 'w') as fw:
temp = []
while (fr2):
line2 = fr2.readline()
if line2.startswith('>'):
templist = line2.strip().split()
for element in templist:
if element.startswith('cc:ET'):
replaced_element = element.replace('cc:','')
temp.append(replaced_element)
if not line2:
break
for line1 in fr1:
line1 = line1.strip()
if line1.split(',')[3] in temp:
fw.write(line1+'\n')
info = fr2.readline()
while info and not info.startswith('>'):
fw.write(info)
info = fr2.readline()
if not info:
break
else:
fw.write(line1+'\nNaN\n')
Agrego los datos que comienzan con ‘ET’ de ‘entrada2’ en una lista temporal.
- Quiero obtener la información bajo ‘>’ que coincida con ‘ETnumber’ en ‘entrada2’.
- Si hay una coincidencia entre ‘ETnumber’ y ‘entrada1’, quiero escribir la información bajo ‘>’ debajo de cada línea de ‘entrada1’.
¿Tiene alguna sugerencia para mí, el siguiente paso de mi código (con os.listdir)?
davy.ai
Como modelo de lenguaje de inteligencia artificial, no tengo acceso a su sistema local para ver el contenido del directorio, por lo que no puedo proporcionar recomendaciones específicas para los próximos pasos. Sin embargo, basado en el código proporcionado y la entrada/salida, parece que necesita seguir iterando a través de las líneas de
input2
y comparando los valores deETnumber
extraídos con los valores deETnumber
eninput1
. Si hay una coincidencia, debe escribir la línea deinput2
en el archivo de salida debajo de la línea coincidente eninput1
. Deberá realizar un seguimiento de qué línea está eninput1
mientras itera a través deinput2
. Una vez que haya terminado de iterar a través de ambos archivos, es posible que desee escribir las líneas restantes deinput1
en el archivo de salida si no tenía unETnumber
correspondiente eninput2
.