Tira de Python con \ n

Este es mi problema.

Estoy tratando de leer un archivo de texto y luego convertir las líneas en flotadores. El archivo de texto tiene \n y \t en él aunque no sé cómo deshacerme de él.

Intenté usar line.strip() pero no lo quité y recibí un error cuando quería convertir el material a flotadores. Entonces intenté line.strip("\n") pero tampoco funcionó. Mi progtwig funciona bien cuando saco \t y \n del archivo de texto, pero es parte de la tarea hacer que funcione con ellos.

Realmente no sé por qué esto no está funcionando. Gracias por cualquier ayuda.

Debería poder usar line.strip('\n') y line.strip('\t') . Pero estos no modifican la variable de line … simplemente devuelven la cadena con \n \t eliminados. Así que tendrás que hacer algo como

 line = line.strip('\n') line = line.strip('\t') 

Eso debería funcionar para eliminar desde el principio y el final. Si tiene \n \t en medio de la cadena, debe hacer

 line = line.replace('\n','') line = line.replace('\t','') 

para reemplazar el \n \t con la nada.

El método strip() elimina los espacios en blanco de manera predeterminada, por lo que no es necesario llamarlo con parámetros como ‘\ t’ o ‘\ n’. Sin embargo, las cadenas en Python son inmutables y no se pueden modificar, es decir, la llamada a line.strip() no cambiará el objeto de line . El resultado es una nueva cadena que es devuelta por la llamada.

Como ya se mencionó, sería útil que publicara un ejemplo de su archivo de entrada. Si hay más de un número en cada línea, strip() no es la función a utilizar. En su lugar, debe usar split() , que también es un método de cadena.

Para concluir, suponiendo que cada línea contiene varios flotantes separados por espacios en blanco y que desea crear una lista de todos los números, puede intentar lo siguiente:

 floats = [] with open(filename) as f: for line in f: floats.extend([float(number) for number in line.split()]) 

¿Qué hay de usar un patrón de expresiones regulares de python?

 import re f = open('test.txt', 'r') strings = re.findall(r"\S+", f.read()) 

Y para tu caso de line.strip () no funcionará porque Python elimina solo los caracteres iniciales y finales

Desde Python Docs : devuelva una copia de la cadena con los caracteres iniciales y finales eliminados . Si se omiten caracteres o Ninguno, se eliminan los caracteres de espacio en blanco. Si se da y no es Ninguno, los caracteres deben ser una cadena; los caracteres de la cadena se eliminarán de los dos extremos de la cadena a la que se llama este método.

Pythons csv library es bueno para esto.

http://docs.python.org/library/csv.html

CSV = valores separados por comas, pero si establece el delimitador = \ t, entonces también funciona con valores separados por tabulaciones.

Si está intentando convertir líneas de flotadores separados por caracteres de tabulación, simplemente float(line) intentará convertir la línea completa en un flotante, que fallará si hay más de uno. Usar la strip para deshacerse de los espacios en blanco iniciales y finales no va a ayudar a ese problema fundamental.

¿Quizás necesitas split cada línea en pedazos y hacer algo con cada pieza?

A menudo, dependiendo de la forma en que lea las líneas, para deshacerse de \ n de myline, puede tomar myline [: – 1] ya que \ n es el último carácter de myline.

Para el ‘\ t’ puede usar replace () o strip ()

Puedes usar:

 mylist = [] # Assuming that you have loaded data into a lines variable. for line in lines: mylist.append(line.strip().split('\t') 

para obtener una lista de python con solo los valores de campo para todas las líneas de datos.