Hướng dẫn python print box around text - hộp in python xung quanh văn bản

Tôi đang tạo một tập lệnh dòng lệnh và tôi muốn có hộp ...

+--------+
|        |
|        |
|        |
+--------+

... Điều đó sẽ luôn phù hợp với nội dung của nó. Tôi biết làm thế nào để làm trên cùng và dưới cùng, nhưng nó sẽ nhận được sự thay đổi và khả năng làm việc chính xác. Có thể có một chuỗi thay thế trên mỗi dòng, hoặc 5, và len của các chuỗi đó có thể là bất cứ thứ gì từ 0 đến 80.

Tôi đã làm những việc như:

+--------+
| 1      |
| 1 2 3  |
| 1 2    |
+--------+
1

Nhưng thánh dang là lộn xộn đó ... và đó chỉ là một sự thay thế được mã hóa cứng. Tôi không biết làm thế nào để làm cho nó động với Say 2 Subs On Line One và 3 subs trên dòng hai và 1 phụ trên dòng ba (tất cả điều này ở định dạng cột).

Vì vậy, ví dụ cơ bản, tôi cần:

+--------+
| 1      |
| 1 2 3  |
| 1 2    |
+--------+

Hỏi ngày 24 tháng 12 năm 2013 lúc 7:11Dec 24, 2013 at 7:11

Hướng dẫn python print box around text - hộp in python xung quanh văn bản

jtsmith2287jtsmith2287jtsmith2287

1.1082 huy hiệu vàng13 Huy hiệu bạc24 Huy hiệu đồng2 gold badges13 silver badges24 bronze badges

0

Tôi làm như thế này:

def bordered(text):
    lines = text.splitlines()
    width = max(len(s) for s in lines)
    res = ['┌' + '─' * width + '┐']
    for s in lines:
        res.append('│' + (s + ' ' * width)[:width] + '│')
    res.append('└' + '─' * width + '┘')
    return '\n'.join(res)

Vì vậy, trước tiên bạn định dạng tất cả các đối tượng của mình thành

+--------+
| 1      |
| 1 2 3  |
| 1 2    |
+--------+
2 WAR, và sau đó chuyển nó qua chức năng
+--------+
| 1      |
| 1 2 3  |
| 1 2    |
+--------+
3.

Đã trả lời ngày 24 tháng 12 năm 2013 lúc 8:31Dec 24, 2013 at 8:31

Bạn có thể làm điều đó với

+--------+
| 1      |
| 1 2 3  |
| 1 2    |
+--------+
4

from tabulate import tabulate

text = """
some words that
could be dynamic but 
are currently static
"""

table = [[text]]
output = tabulate(table, tablefmt='grid')

print(output)

Output:

+-----------------------+
| some words that       |
| could be dynamic but  |
| are currently static  |
+-----------------------+

Đã trả lời ngày 30 tháng 5 năm 2018 lúc 13:11May 30, 2018 at 13:11

Eyal Levineyal LevinEyal Levin

14,5K5 Huy hiệu vàng66 Huy hiệu bạc55 Huy hiệu Đồng5 gold badges66 silver badges55 bronze badges

Bạn có thể sử dụng mô -đun

+--------+
| 1      |
| 1 2 3  |
| 1 2    |
+--------+
5 từ Thư viện tiêu chuẩn Python cho Linux và Mac. Ngoài ra, bạn có thể thử thư viện
+--------+
| 1      |
| 1 2 3  |
| 1 2    |
+--------+
6 cho Mac, Linux và Windows. Ngoài ra, bạn có thể đọc nó. Nhưng đối với hộp thoại đơn giản, bạn có thể sử dụng mã tiếp theo:

def my_text_frame(string_lst, width=20):
    g_line = "+{0}+".format("-"*(width-2))
    print g_line
    for line in string_lst:
        print "| {0:<{1}} |".format(line, width-4)
    print g_line
my_text_frame("""Some text
123456 789
123""".splitlines())

Output:

+------------------+
| Some text        |
| 123456 789       |
| 123              |
+------------------+

Đã trả lời ngày 24 tháng 12 năm 2013 lúc 7:36Dec 24, 2013 at 7:36

Hướng dẫn python print box around text - hộp in python xung quanh văn bản

Michael Kazarianmichael KazarianMichael Kazarian

4.2361 Huy hiệu vàng21 Huy hiệu bạc25 Huy hiệu đồng1 gold badge21 silver badges25 bronze badges

Bạn có thể sử dụng

+--------+
| 1      |
| 1 2 3  |
| 1 2    |
+--------+
7 cho các trường chiều rộng và chính xác của định dạng chuỗi, như được mô tả trong câu trả lời này. Đây là một mẫu:

text = """\
This is
a test of the
column formatting
system.""".splitlines()

maxlen = max(len(s) for s in text)
colwidth = maxlen + 2

print '+' + '-'*colwidth + '+'
for s in text:
    print '| %-*.*s |' % (maxlen, maxlen, s)
print '+' + '-'*colwidth + '+'

prints:

+-------------------+
| This is           |
| a test of the     |
| column formatting |
| system.           |
+-------------------+

Đã trả lời ngày 24 tháng 12 năm 2013 lúc 8:06Dec 24, 2013 at 8:06

Hướng dẫn python print box around text - hộp in python xung quanh văn bản

PaulmcgpaulmcgPaulMcG

60.7K15 Huy hiệu vàng89 Huy hiệu bạc127 Huy hiệu đồng15 gold badges89 silver badges127 bronze badges

Tôi đến bữa tiệc muộn, nhưng đây là phiên bản của tôi:

def breakLine(text, wrap=80):
    if len(text) > wrap:
        char = wrap
        while char > 0 and text[char] != ' ':
            char -= 1
        if char:
            text = [text[:char]] + breakLine(text[char + 1:], wrap)
        else:
            text = [text[:wrap - 1] + '-'] + breakLine(text[wrap - 1:], wrap)
        return text
    else:
        return [cleanLine(text)]

def cleanLine(text):
    if text[-1] == ' ':
        text = text[:-1]
    if text[0] == ' ':
        text = text[1:]
    return text

def boxPrint(text, wrap=0):
    line_style = '-'
    paragraph = text.split('\n')
    if wrap>0:
        index = 0
        while index < len(paragraph):
            paragraph[index] = cleanLine(paragraph[index])
            if len(paragraph[index]) > wrap:
                paragraph = paragraph[:index] + breakLine(paragraph[index]\
                    , wrap) + paragraph[index + 1:]
            index += 1

    length = (max([len(line) for line in paragraph]))
    print '+' + line_style * length + '+'
    for line in paragraph:
        print '|' + line + ' ' * (length - len(line)) + '|'
    print '+' + line_style * length + '+'

if __name__ == "__main__":
    text = "Some text comes here to be printed in a box!!!"
    boxPrint(text, 20)
    text = "Title:\nBody lorem ipsum something body\ncheers,"
    boxPrint(text, 20)
    boxPrint(text)
    text = "No Space:\nThisIsATextThatHasNoSpaceForWrappingWhichGetsBrokenUsingDashes"
    boxPrint(text, 20)

Bản in nào:

+--------+
| 1      |
| 1 2 3  |
| 1 2    |
+--------+
0

Đã trả lời ngày 22 tháng 6 năm 2016 lúc 22:59Jun 22, 2016 at 22:59

Hướng dẫn python print box around text - hộp in python xung quanh văn bản

BarzinmbarzinmBarzinM

3833 Huy hiệu bạc8 Huy hiệu Đồng3 silver badges8 bronze badges