Le due alternative principali: leggere tutto in una singola stringa e rimuovere nuove righe:
clean = open('thefile.txt').read().replace('\n', '')
o, leggere riga per riga, rimuovendo la nuova riga che termina ogni riga, e unirsi di nuovo:
clean = ''.join(l[:-1] for l in open('thefile.txt'))
La prima alternativa è probabilmente più veloce, ma, come sempre, vi consigliamo caldamente di misurare la velocità (ad esempio, utilizzare python -mtimeit
) in caso di vostra speci interesse fic, piuttosto che presumere che tu sappia come saranno le prestazioni. I RE sono probabilmente più lenti, ma, ancora una volta: non indovinare, MISURA!
Quindi, ecco alcuni numeri per un file di testo specifica sul mio portatile:
$ 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
Il file è una versione del KJ Bibbia, scaricato e decompresso da here (io credo che sia importante eseguire tali misurazioni su un file facilmente recuperabile, così altri possono facilmente riprodurli!).
Ovviamente, alcuni millisecondi più o meno su un file di 4,3 MB, 34000 righe, potrebbero non essere importanti per voi in un modo o nell'altro; ma siccome l'approccio più veloce è anche il più semplice (lontano da un evento insolito, specialmente in Python ;-), penso che sia una buona raccomandazione.
E riguardo string.strip()? es. python -mtimeit "'' .join (l.strip() per l in open ('AV1611Bible.txt'))" – hughdbrown
Questo ha una semantica diversa, poiché rimuove gli spazi iniziali e finali, che NON fa parte delle specifiche (anche rstrip rimuoverà comunque gli spazi finali, di nuovo al di fuori delle specifiche). Ad ogni modo, entrambi sono molto più lenti di quelli che usano l [: - 1], di circa il 3%, ripetutamente. –