使用Python字符串格式插入制表符

5

我正在尝试使用format()来组合一个字符串,但是无法理解如何进行操作。

lems = ['scaena', 'persona', 'improbus']
for i in lems:
    print('{}{}{}'.format(i, '\t', 'whatever'))

但是选项卡的显示不符合我的预期。实际上,在列表中,最后一项的选项卡是适用的,因为它被打印出来了:

scaena  text
persona text
improbus        text

发生了什么?谢谢。


2
它在所有的应用程序中都正常运行。看。 - kindall
好的,如果我执行repr(i),我确实可以看到制表符,但是为什么会有额外的空格呢?如果我将其写入文本文件,为什么我的gedit文本编辑器无法识别制表符呢? - rearThing
额外的空格是为了到达下一个制表位... - kindall
5个回答

11

选项卡正常工作,您可能正在寻找.ljust(width)

lems = ['scaena', 'persona', 'improbus']
for i in lems:
    print('{}{}'.format(i.ljust(10), 'whatever'))

输出:

scaena    whatever
persona   whatever
improbus  whatever
有时候计算字符串的最大长度可以使输出更可靠。
lems = ['scaena', 'persona', 'improbus']
max_len = max(len(l) for l in lems)
for i in lems:
    print('{}{}'.format(i.ljust(max_len + 1), 'whatever'))

我不明白为什么在单词之间可以数出不同的空格,比如scaena和whatever之间有4个空格,persona和whatever之间只有1个空格,第三行有8个空格。此外,我需要制表符,因为我稍后要将其写入txt文件,而文本编辑器无法将其读取为制表符。 - rearThing

5

我使用了这种结构:

tab = '\t'
file.write(f'''Name{tab}sn{tab}port{tab}sw_sn{tab}sw_port''')

在 f-string 中直接使用 \t 也可以。 - Kevin

1
f-string是另一种以更紧凑的格式实现与答案相同的选项。"<10"表示右对齐,宽度为10。
lems = ['scaena', 'persona', 'improbus']
for i in lems:
    print(f"{i:<10} whatever")

输出:

scaena     whatever
persona    whatever
improbus   whatever

1

你也可以使用 f-string:

lems = ['scaena', 'persona', 'improbus']
for i in lems:
    print(f"{i}\t{'whatever'}")

你可以使用函数repr()查看字符串中是否添加了制表符。
from reprlib import repr

lems = ['scaena', 'persona', 'improbus']
for i in lems:
    print(repr(f"{i}\t{'whatever'}"))

输出:

'scaena\twhatever'
'persona\twhatever'
'improbus\twhatever'

对于 f"{i}\t{'whatever'}",将 i 增加 1。 - rearThing

0
我遇到的问题与Python无关,因此我的问题已经有了答案,我会重申并将其标记为正确答案:
for i in lems:
    i = i.strip()
    print('{}{}{}'.format(i, '\t', 'text'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接