2015-03-25 20 views
2

Это мой file.txt:Заменить « п» в строке в Python 2.7

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

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

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 -*-

Спасибо.

+3

Не удается воспроизвести; работая как ожидалось для меня. – NPE

+0

Есть ли в вашем тексте символы '\ r'? Что печатает печать (текст)? У меня не было проблем с запуском вашего кода; он работает для меня, как и предполагалось. – juhist

+0

print (repr (текст)) = 'Яйцо и бекон; \ r \ nEgg, колбаса и бекон \ r \ nEgg и спам; \ r \ nSpam Egg Sausage and Spam; \ r \ n' Я сделал это изменение " замените ('\ r \ n', '$') ", и теперь он отлично работает! спасибо !! –

ответ

4

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

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

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

>>> import re 
>>> re.sub('\r?\n', ' $ ', 'a\r\nb\r\nc') 
'a $ b $ c' 
>>> re.sub('\r?\n', ' $ ', 'a\nb\nc') 
'a $ b $ c' 
+0

Дополнительный комментарий: Я бы порекомендовал сначала «text = text.replace ('\ r \ n', '\ n')', а затем выполнил 'text = text.replace ('\ n', '$')' , Это работает для всех файлов, для которых есть разделители строк '' \ n'' и для тех, у которых есть разделители строк '' \ r \ n''. – juhist

+0

Проверьте редактирование, я думаю, лучшее решение с регулярным выражением –

+0

Да, я согласен с тем, что ваше регулярное решение лучше. Тем не менее, я уже получил свое преимущество. – juhist

2

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

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' 
Смежные вопросы