2014-01-11 2 views
4

Не могли бы вы рассказать мне, почему разрыв строки \ n не работает?Разрыв строки или « n» не работает.

itemsToWriteToFile = "Number 1:", 12, "\nNumber 2: ", 13, "\nNumber 3: ", 13, "\nNumber 4: ", 14 
itemsToWriteToFile = str(itemsToWriteToFile) 

itemsToWriteToFile = itemsToWriteToFile.replace('(', "") 
itemsToWriteToFile = itemsToWriteToFile.replace(')', "") 
itemsToWriteToFile = itemsToWriteToFile.replace('"', "") 
itemsToWriteToFile = itemsToWriteToFile.replace(',', "") 
itemsToWriteToFile = itemsToWriteToFile.replace('\n', "") 

print(itemsToWriteToFile) 
+0

Почему вы превращающего кортеж строк и целых чисел в строку, в первую очередь? Какая у вас цель? – DSM

+0

OH, извините ... полностью увидел, что это появилось в теге JS. (удаление исходного комментария). –

+0

DSM, код немного изменен из моей оригинальной программы, поэтому имеет смысл. –

ответ

2

Преобразование str() является преобразование "\ N" в "п \\".

>>> str('\n') 
'\n' 
>>> str(['\n']) 
"['\\n']" 

Что там происходит? Когда вы вызываете str() в списке (то же самое для кортежа), это вызовет метод списка __str__(), который, в свою очередь, вызывает __repr__() по каждому из его элементов. Давайте проверим, каково его поведение:

>>> "\n".__str__() 
'\n' 
>>> "\n".__repr__() 
"'\\n'" 

Итак, у вас есть причина.

касается того, как это исправить, как Blender предложил, лучший вариант был бы не использовать str() в списке:

''.join(str(x) for x in itemsToWriteToFile) 
+0

Почему он добавляет второй «\» при использовании str()? –

+0

Я обновил свой ответ. Что касается поведения str .__ repr__, я не мог найти ни одной ссылки, объясняющей его, но это имеет смысл в том, что вы хотите визуализировать содержимое строки, а не фактическую строку. –

+0

Это неверно. Вы не должны заменять их в первую очередь. – Blender

0

Использование itemsToWriteToFile.replace('\\n', "") вместо itemsToWriteToFile.replace('\n', "")

>>itemsToWriteToFile = itemsToWriteToFile.replace('\\n', "") 

Final Output:- 

>>> print(itemsToWriteToFile) 
'Number 1:' 12 'Number 2: ' 13 'Number 3: ' 13 'Number 4: ' 14 
1

использования этого

itemsToWriteToFile = itemsToWriteToFile.translate(None, "(),\"\\n") 
2

Все остальные ответы устраняют проблему, которая ouldn't даже не существует. Переведите свой кортеж строк и ints в список строк. Затем используйте str.join(), чтобы соединить их вместе в одну большую строку:

foo = "Number 1:", 12, "\nNumber 2: ", 13, "\nNumber 3: ", 13, "\nNumber 4: ", 14 
bar = map(str, foo) 

print(''.join(bar)) 
+0

Я вижу, что вы там сделали. Спасибо за совет. –

+0

Этот ответ неплохой, но я бы не сказал, что это лучше, чем у Зигфрида. Я googled «python newline не работает» и получил этот вопрос. Оптимизация кода OP для меня бессмысленна, и я подозреваю большинство людей. Гораздо полезнее знать, что 'str ('\ n')' возвращает ''\ n''. – gwg

+0

@gwg: Это не оптимизация. Если вы хотите объединить все вместе, используйте 'str.join()'. (Ab) с использованием 'str (itemsToWriteToFile)', а затем удаление скобок, запятых и кавычек - это просто неправильный способ сделать это. Это похоже на использование 'eval (str (a) + '*' + str (b))' для умножения двух чисел. – Blender

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