2010-11-19 3 views
1

Я работаю над решением для анаграмм в Python 2.7 и натолкнулся на любопытство, которое мне не удалось найти. Программа считывает данные из файла, который содержит список анаграмм в формате, как так:Прямая косая черта в Python replace()

# anagram 
# anagram 
# anagram 
. 
. 
. 
etc 

Читая это непосредственно в строку, Python, очевидно, комментарии все, так что я играл с заменой() пытается найти способ лишить хэш-символы. Попытка ...

string = file.read().replace('#', '') 

... будет производить пустую строку. Я пытался использовать обратную косую черту перед хэша, но goofed и typo'd косую черту, которая дала мне результат:

string = file.read().replace('/#', '') 
string = '#\tanagram\n#\tanagram\n#\tanagram' 

Зачистка ненужные символы не было никакой опасности в этой точке и работает программа в совершенстве. Тем не менее, я не доволен использованием строки кода, которую я не совсем понимаю. Мне не повезло найти какую-либо документацию или код, который объясняет/делает нас чем-то вроде этого, поэтому я либо искал неправильные места, либо искал неправильную вещь.

Может ли кто-нибудь предложить объяснение, почему оно ведет себя так?

+0

в вашем втором примере 'replace' просто ничего не заменяет и возвращает исходную строку, потому что в вашем файле у вас нет последовательности'/# '. – SilentGhost

+0

# только для Python в исходном коде, а не в строках, считанных из файла. –

ответ

0

Вы изменили что-нибудь еще, когда вы заменили '#' на '/#'? Попробуйте запустить свою программу снова, точно так, как она есть, но удалите /. # не является особым символом в строках Python.

Код, который вы нам указали, имеет ничего недействительного в замене, поскольку в вашей строке нет никаких экземпляров '/#'.

Sample интерактивная сессия:

>>> "#foo bar\n\t#blah".replace("#", "") 
'foo bar\n\tblah' 
+0

Спасибо за ваш ответ, Натон. Удаление косой черты, как вы упомянули, приводит к пустой строке. Другие изменения не внесены. – 2010-11-19 17:11:05

+0

@ Vulpine: нет воспроизведения. Покажите свое фактическое содержимое. 'replace', возвращающий пустую строку, является чем-то особенным. – SilentGhost

+0

@ Vulpine: ваш файл ASCII закодирован? – nmichaels

3

Попробуйте это:

[s.lstrip('#\t') for s in file.read().split('\n')] 

Python не лечить # специально каким-либо образом внутри строки, вам не нужно, чтобы избежать этого.

Смежные вопросы