如何包装文本?

2024-09-29 22:28:19 发布

您现在位置:Python中文网/ 问答频道 /正文

在打印列表中的项目时,我遇到了保留特定格式的问题:

[TEXT1, TEXT2, TEXT3, TEXT4, TEXT5, TEXT6, TEXT7, TEXT8, TEXT9]

预期输出:(“~”表示文档中的空白)

~~~~~~~~~~TEXT1, TEXT2, TEXT3, TEXT4, TEXT5,
~~~~~~~~~~TEXT6, TEXT7, TEXT8, TEXT9

我遇到的问题是在TEXT2之后附加TEXT1,而不重新添加空格(“~”)。你知道吗

a = ['A121', 'A221', 'A321', 'A421', 'A521', 'A621', 'A721', 'A821', 'A921']

for v in a:
    counter = 0
    if counter == 5:
        print '\n'
    print "                {},".format(v.ljust(0)),

输出:

                A121                 A221                 A321                 A421                 A521                 A621                 A721                 A821                 A921

预期产量:

                A121, A221, A321, A421, A521,
                A621, A721, A821, A921

Tags: text1text2text4text3text5text6a121a521
2条回答

下面是一个相当通用、简洁、高效的方法:

import textwrap
from itertools import zip_longest

def grouper(n, iterable, _SENTINEL=object()):
    """ Collect data into fixed-length chunks or blocks. """
    args = [iter(iterable)] * n
    for t in zip_longest(*args, fillvalue=_SENTINEL):
        yield list(elem for elem in t if elem is not _SENTINEL)

def text_wrap(words, numcols, indent=0):
    lines = (' '.join(group) for group in grouper(numcols, words))
    return textwrap.indent('\n'.join(lines), indent*' ')


if __name__ == '__main__':

    a = 'A121', 'A221', 'A321', 'A421', 'A521', 'A621', 'A721', 'A821', 'A921'
    lines = text_wrap(a, 5, 8)
    print(lines)

输出:

        A121 A221 A321 A421 A521
        A621 A721 A821 A921

有很多方法可以解决这个问题:

一:

a = ['A121', 'A221', 'A321', 'A421', 'A521', 'A621', 'A721', 'A821', 'A921']

INDENT = ' '*10
NUMBER_OF_COLUMNS = 5

lead = INDENT
for item_number, item in enumerate(a):
    print("{lead}{item}".format(lead=lead, item=item), end='')

    if item_number % NUMBER_OF_COLUMNS == NUMBER_OF_COLUMNS - 1:
        lead = ",\n" + INDENT
    else:
        lead = ", "

二:

table = []
row = []

for item in a:
    row.append(item)
    if len(row) == NUMBER_OF_COLUMNS:
        table.append(INDENT + ', '.join(row))
        row = []

table.append(INDENT + ', '.join(row))

print(',\n'.join(table))

三,一行:

print(',\n'.join(INDENT + ', '.join(a[i:i + NUMBER_OR_COLUMNS]) for i in range(0, len(a), NUMBER_OR_COLUMNS)))

或者也许text包装.填充()将起作用:

from textwrap import fill

print(fill(', '.join(a), initial_indent=10*' ', subsequent_indent=10*' ', width=40))

所有输出(示例中带有逗号a):

          A121, A221, A321, A421, A521,
          A621, A721, A821, A921

相关问题 更多 >

    热门问题