2015-04-12 5 views
2
>>> print(("hello\nworld", "hello2")) 
('hello\nworld', 'hello2') 

Как сделать его печатью:печать кортежа красиво с новой строкой

('hello 
world', 'hello2') 

Я имею в виду, что не должен печатать \n как символ, но реализовать этот символ и сделать новую линию.

Python версия 3.4.

Я пытался использовать pprint, но он делает то же самое:

>>> import pprint 
>>> pp = pprint.PrettyPrinter(indent=4) 
>>> pp.pprint(("hello\nworld")) 
'hello\nworld' 
+0

Я думаю, что вы не можете распечатать структуру данных и оценить данные одновременно. Вам придется реализовать его самостоятельно. –

ответ

2

Нет ничего, что автоматически сделает этот вид печати. Контейнеры Python по умолчанию используют repr для преобразования их содержимого в строки (даже если вы вызываете str на контейнер, а не repr). Это делается для того, чтобы избежать двусмысленности от таких вещей, как ["foo, bar", "baz"] (если котировки не включались, вы не могли определить, было ли в списке два или три элемента).

Вы можете сделать свое собственное форматирование вашего кортежа, однако, и получить вывод, который вы хотите:

print("({})".format(", ".join(tup))) 
0

Запись:

print("('Hello\nworld', 'hello2')") 

будет буквально печать:

('hello 
world', 'hello2') 

Если вы просто хотите новую линию вставленный в вашу строку, используйте это:

print("Line1\nLine2") 

the \ n - это escape-последовательность для новой строки, завершающая текущую строку и сигнализирующая о начале следующей строки.

Для сравнения с кодом у вас есть, вы должны обратить внимание на размещение в "символы, обозначающие начало и конец строки.

0

Если вы не хотите, круглые скобки и запятые, было бы простой вопрос об использовании * оператора:

>>> t = ("hello\nworld", "hello2") 
>>> print(*t) 
hello 
world hello2 

Если вы хотите, чтобы напечатать круглые скобки и запятые, но и превратить '\n' в символ новой строки, вы будете иметь код такого поведения, как говорит @Peter

.
>>> print('(' + ', '.join(t) + ')') 
(hello 
world, hello2) 
+0

Не заметил, что вы включили '' 'вокруг каждой строки. Если вы этого хотите, используйте ответ @ Джереми. Вам нужно будет отформатировать кортеж так, как вы хотите, чтобы он выглядел - '' ('1', '2') "' будет отличаться от '" ('1', '2') ". – TigerhawkT3

0
>>> t = ("hello\nworld", "hello2") 
>>> print '({})'.format(', '.join("'{}'".format(value) for value in t)) 
('hello 
world', 'hello2') 

Это не будет правильным, если строки содержат ' знак.

Помните, что форматирование Python делает умные вещи для обработки строк, содержащих кавычки.

0

Вот более сложный пример из какого-то выхода анзибль, что раздражает меня:

import pprint 

f={ 
    "failed": True, 
    "msg": "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'dict object' has no attribute 'uid'\n\nThe error appears to have been in '/usr/local/etc/ansible/roles/singleplatform-eng.users/tasks/main.yml': line 7, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n- name: Per-user group creation\n^here\n" 
    } 

def ppdump(data): 
    print pprint.pformat(data, indent=4, width=-1).replace('\\n', '\n') 

ppdump(f) 
{ 'failed': True, 
    'msg': "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'dict object' 
has no attribute 'uid' 

The error appears to have been in '/usr/local/etc/ansible/roles/singleplatform-eng.users/tasks/main.yml': line 7, column 3, but may 
be elsewhere in the file depending on the exact syntax problem. 

The offending line appears to be: 


- name: Per-user group creation 
^here 
"} 

Проблема заключается в том, что pprint убегает из новой строки, так что я просто их экранирования в.

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