python显示\ n而不是换行

时间:2019-03-19 14:16:37

标签: python string tuples newline repr

我写了一个函数来创建SQL查询的VALUES部分:

def query_values(data_iterator):
    return ',\n'.join('\n({})\n'.format(',\n'.join('"{}"'.format(value) for value in data_row)
                                     ) for data_row in data_iterator
                      ),

调用此函数并print的结果是:

query_values:
('\n("801",\n"printer",\n"barcode printer")\n,\n\n("844",\n"laptop",\n"windows")\n,\n\n("997",\n"printer",\n"barcode printer")\n',)

全部一行。显示\n而不是换行。

最初我有一个\n,但是后来我插入了多个,只是看它们是否会显示出来。

第二个问题是整个内容周围都有括号,这是我不想要的。

我对这两个问题感到困惑,我想出了第二个问题的解决方案:

该函数结尾处有一个逗号。逗号导致函数返回一个元组,而不是单个字符串。

我删除了逗号:

def query_values(data_iterator):
    return ',\n'.join('\n({})\n'.format(',\n'.join('"{}"'.format(value) for value in data_row)
                                     ) for data_row in data_iterator
                      )

,并修复了两者问题。现在的输出是:

query_values:

("801",
"printer",
"barcode printer")
,

("844",
"laptop",
"windows")
,

("997",
"printer",
"barcode printer")

我放回逗号,并显示\n。我删除了逗号,然后又有多行。

我已删除无关的\n,所以现在我得到了想要的:

query_values:

("801","printer","barcode printer"),
("844","laptop","windows"),
("997","printer","barcode printer")

因此,我的代码可以正常工作,但是我对旧版本代码中显示的\n字符感到完全困惑。为什么会这样?

更新: 对这个问题的几个答案集中在为什么我得到元组上。那不是我的问题。为什么显示/n

4 个答案:

答案 0 :(得分:19)

这似乎是元组的行为。打印元组时,print在每个元素上调用__repr()__。列表也是如此。

我尝试过:

tup = "xxx\nxx",
lst =["xxx\nxx"]
for t in tup,lst:
    print('t      :', t)
    for s in t:
        print('element:',s)
        print('   repr:',s.__repr__())
    print('---')

,输出为:

t      : ('xxx\nxx',)
element: xxx
xx
   repr: 'xxx\nxx'
---
t      : ['xxx\nxx']
element: xxx
xx
   repr: 'xxx\nxx'
---

因此,元组和列表的行为相同。

当我们有一个字符串时,调用__repr__()不会扩展\n个字符,并在其周围加上引号:

s = "xxx\nxx"
print('s           :', s)
print('s.__repr__():', s.__repr__())

输出:

s           : xxx
xx
s.__repr__(): 'xxx\nxx'

running.tinterjayDaniel Roseman的注释中提到了该元组行为,但没有答案,这就是为什么我发布此答案。

答案 1 :(得分:12)

编写return something,return (something,)相同:它返回一个包含一个元素的元组。当您print时,它将显示该元组的外部括号,并且内部的字符串将被打印为其源代码表示,即带有转义码和内部引号。

但是,return something只是返回该值,然后可以正常打印该值。

答案 2 :(得分:1)

这似乎是Python中元组的行为。 您可以使用以下更简单的情况进行测试:

>>> print ("xxx\n\nx",)
('xxx\n\nx',)

似乎Python可以帮助您进行调试,并在打印时转义字符串中的所有命令序列,以便字符串以与定义时相同的方式出现。

这确实使您感到困惑,有趣的情况。 :)

答案 3 :(得分:0)

元组可以带或不带括号来表示,其逗号决定类型。

>>> t = 1, 'a', 'abc'
>>> type(t)
<type 'tuple'>
>>> t
(1, 'a', 'abc')
>>> 

在上述情况下,您在字符串后添加了结尾逗号,而python将其解释为元组。

选中此link

>>> t= 'a',
>>> type(t)
<type 'tuple'>
>>> t
('a',)
>>> t = 'a'
>>> type(t)
<type 'str'>
>>> t
'a'