Две основные альтернативы: читать все как одну строку и удалять символы новой строки:
clean = open('thefile.txt').read().replace('\n', '')
или, читайте построчно, удаляя символ новой строки, заканчивающийся в каждой строке, и снова присоединяйте его:
clean = ''.join(l[:-1] for l in open('thefile.txt'))
Первый вариант, вероятно, быстрее, но, как всегда, я настоятельно рекомендую вам ИЗМЕРЯТЬ скорость (например, используйте python -mtimeit
) в тех случаях, которые вас интересуют, а не просто предполагать, что вы знаете, как будет работать производительность. RE, вероятно, медленнее, но, опять же: не угадывайте, ИЗМЕРЯЙТЕ!
Итак, вот некоторые цифры для конкретного текстового файла на моем ноутбуке:
$ 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
Файл представляет собой версию Библии KJ, загруженную и разархивированную с здесь (я думаю, важно выполнять такие измерения на одном легко извлекаемом файле, чтобы другие могли легко их воспроизвести!).
Конечно, несколько миллисекунд, больше или меньше для файла размером 4,3 МБ, 34 000 строк, могут так или иначе не иметь для вас большого значения; но поскольку самый быстрый подход также самый простой (далеко не необычный случай, особенно в Python ;-), я думаю, что это довольно хорошая рекомендация.