Замените '\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'
Вы можете использовать сплитлайн.
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'