Las dos alternativas principales: leer todo en una sola cuerda y eliminar saltos de línea:
clean = open('thefile.txt').read().replace('\n', '')
o, leer línea por línea, eliminando la nueva línea que termina cada línea, y unirlo de nuevo:
clean = ''.join(l[:-1] for l in open('thefile.txt'))
La primera alternativa es probablemente más rápido, pero, como siempre, recomiendo encarecidamente que miden la velocidad (por ejemplo, utilizar python -mtimeit
) en los casos de su especificidad interés de fic, en lugar de solo asumir que usted sabe cómo será el rendimiento. Los RE son probablemente más lentos, pero, de nuevo: ¡no adivinen, MIDA!
Así que aquí están algunos números para un archivo de texto específico en mi portátil:
$ python -mtimeit -s"import re" "re.sub('\n','',open('AV1611Bible.txt').read())"
10 loops, best of 3: 53.9 msec per loop
$ python -mtimeit "''.join(l[:-1] for l in open('AV1611Bible.txt'))"
10 loops, best of 3: 51.3 msec per loop
$ python -mtimeit "open('AV1611Bible.txt').read().replace('\n', '')"
10 loops, best of 3: 35.1 msec per loop
El archivo es una versión de la Biblia KJ, descargado y descomprimido de here (yo creo que es importante realizar tales mediciones en un archivo fácil de obtener, para que otros puedan reproducirlos fácilmente!).
Por supuesto, unos pocos milisegundos más o menos en un archivo de 4.3 MB, 34,000 líneas, pueden no importar mucho para usted de una forma u otra; pero como el enfoque más rápido también es el más simple (lejos de ser algo inusual, especialmente en Python ;-), creo que es una muy buena recomendación.
¿Qué tal string.strip()? es decir, python -mtimeit "'' .join (l.strip() para l en abierto ('AV1611Bible.txt'))" – hughdbrown
Eso tiene una semántica diferente, ya que eliminaría los espacios iniciales y finales, lo cual NO es parte de las especificaciones (incluso rstrip aún eliminaría los espacios finales, nuevamente fuera de las especificaciones). De todos modos, ambos son muy ligeramente más lentos que el uso de l [: - 1], en alrededor del 3%, de forma repetitiva. –