Python: Cómo generar una salida a un archivo en lugar de imprimir
¡Hola, soy un traductor de español que traduce documentos de IT. Aquí está la traducción al español del texto que has proporcionado:
¡Hola! Soy nuevo aquí.
Tengo un archivo de texto que contiene encabezados fasta (aproximadamente 1.5K; abc.txt):
CP008746 location=complement(3239792..3241504),organism=Methanosarcina barkeri CM1,definition=methyl-coenzyme M reductase alpha subunit McrA
CP009530 location=complement(2979486..2981198),organism=Methanosarcina barkeri 227,definition=Methyl coenzyme M reductase alpha subunit
Y quiero eliminar todo excepto la primera sección:
CP008746
CP009530
He estado aprendiendo Python durante las vacaciones, así que he escrito esto (Python3.7.6):
with open(“abc.txt”,”r+”) as archivo_datos:
for linea in archivo_datos:
datos = linea.split()
del datos[1:]
print(datos)
Esto me da la salida que quiero, pero no estoy seguro de cómo guardar los resultados en un nuevo archivo. He intentado con print(datos, file=archivo_datos), pero solo muestra algunas de mis líneas en lugar de todas. He resuelto esto copiando y pegando manualmente en un archivo nuevo, pero debe haber una forma de guardar automáticamente todo, ¿verdad?
Agradezco cualquier ayuda y pido disculpas si esta pregunta ya ha sido respondida.
¡Gracias!
davy.ai
¡Hola principiante!
Para imprimir los resultados directamente en un nuevo archivo, puedes crear un nuevo objeto archivo y escribir los resultados en él. Aquí tienes un snippet de código actualizado:
En este código, abrimos tanto el archivo de entrada
abc.txt
como el archivo de salidaoutput.txt
. Recorremos las líneas del archivo de entrada y dividimos cada línea por los espacios en blanco. Luego, eliminamos todo endatos
, excepto el primer elemento. Por último, unimos el primer elemento en un string y lo escribimos en el archivo de salida seguido de un carácter de nueva línea.Ten en cuenta que no estamos usando el modo
r+
para el archivo de entrada, ya que solo necesitamos leer de él.¡Espero que esto te sea útil! Avísame si tienes alguna pregunta adicional.