Замените '\n' в строке в Python 2.7

Это мой файл file.txt:

Egg and Bacon;
Egg, sausage and Bacon
Egg and Spam;
Spam Egg Sausage and Spam;
Egg, Bacon and Spam;

Я хочу преобразовать новую строку '\n' в ' $ '. Я просто использовал:

f = open(fileName)
text = f.read()      
text = text.replace('\n',' $ ')
print(text)

Это мой вывод:

$ Spam Egg Sausage and Spam;

и мой вывод должен быть таким:

Egg and Bacon; $ Egg, sausage and Bacon $ Egg ...

Что я делаю неправильно? я использую #-*- encoding: utf-8 -*-

Спасибо.

2 ответа

Решение

Возможно, что ваши новые строки представлены в виде \r\n, Для их замены необходимо сделать:

text.replace('\r\n', ' $ ')

Для портативного решения, которое работает в обеих UNIX-подобных системах (которое использует \n) и Windows (которая использует \r\n), вы можете заменить текст с помощью регулярного выражения:

>>> import re
>>> re.sub('\r?\n', ' $ ', 'a\r\nb\r\nc')
'a $ b $ c'
>>> re.sub('\r?\n', ' $ ', 'a\nb\nc')
'a $ b $ c'
text = text.replace('\\n', '')

Вы можете использовать сплитлайн.

lines = """Egg and Bacon;
Egg, sausage and Bacon
Egg and Spam;
Spam Egg Sausage and Spam;
Egg, Bacon and Spam;"""

print(" $ ".join(lines.splitlines()))
Egg and Bacon; $ Egg, sausage and Bacon $ Egg and Spam; $ Spam Egg Sausage and Spam; $ Egg, Bacon and Spam;

Или просто используйте rstrip и присоединитесь к объекту файла, не считывая все в память:

with open("in.txt") as f: 
    print(" $ ".join(line.rstrip() for line in f))
    Egg and Bacon; $ Egg, sausage and Bacon $ Egg and Spam; $ Spam Egg Sausage and Spam; $ Egg, Bacon and Spam;

Что является гораздо более эффективным решением, чем чтение всего файла в память и использование регулярных выражений. Вы также должны всегда использовать with чтобы открыть ваши файлы, как он закрывает их автоматически.

Rstrip удалит \n\r\n так далее..

In [41]: s = "foo\r\n"
In [42]: s.rstrip()
Out[42]: 'foo'    
In [43]: s = "foo\n"    
In [44]: s.rstrip()
Out[44]: 'foo'
Другие вопросы по тегам