Hướng dẫn how do i format a multiline string in python? - làm cách nào để định dạng chuỗi nhiều dòng trong python?

Bản tóm tắt

Nhảy thẳng xuống và nhìn vào các ví dụ 1 và 4 dưới đây.

Câu trả lời đầy đủ:

Tôi vừa mới biết về mô -đun Python

import textwrap
3, với chức năng
import textwrap
4 thực sự tiện dụng của nó và xem xét nó xuất hiện từ Python 2.7, tôi không thể tin rằng nó không phổ biến hơn!

Sử dụng

import textwrap
4 xung quanh chuỗi đa dòng giải quyết tất cả các vấn đề trong câu trả lời trước đây của tôi!

Đây là tài liệu chính thức về nó (nhấn mạnh thêm):

import textwrap
6

Loại bỏ bất kỳ khoảng trắng hàng đầu chung khỏi mọi dòng trong văn bản.

Điều này có thể được sử dụng để tạo các chuỗi được trích xuất ba dòng xếp lên với cạnh trái của màn hình, trong khi vẫn trình bày chúng ở mã nguồn ở dạng thụt lề.

Lưu ý rằng các tab và không gian đều được coi là khoảng trắng, nhưng chúng không bằng nhau: các dòng

import textwrap
7 và
import textwrap
8 được coi là không có khoảng trắng hàng đầu.

Các dòng chỉ chứa khoảng trắng bị bỏ qua trong đầu vào và được chuẩn hóa thành một ký tự mới duy nhất trong đầu ra.

Ví dụ:

def test():
    # end first line with \ to avoid the empty line!
    s = '''\
    hello
      world
    '''
    print(repr(s))          # prints '    hello\n      world\n    '
    print(repr(dedent(s)))  # prints 'hello\n  world\n'

Cho tất cả các ví dụ

import textwrap

ví dụ 1

Vì vậy, thay vì điều này, vì câu trả lời được phát hành nhiều nhất (điều này mất đi sự tốt đẹp, sạch sẽ, thụt lề):instead of this, as the most-upvoted answer states (this loses the nice, clean, indentation):

cmd = '''line {0}
line {1}
line {2}'''.format(1,2,3)

print(cmd)

Làm điều này (và giữ cho tốt đẹp, sạch sẽ, thụt lề)! (and KEEP the nice, clean, indentation)!

import textwrap

cmd = textwrap.dedent('''\
    line {0}
    line {1}
    line {2}''').format(1,2,3)

print(cmd)

Hoặc, sử dụng chuỗi định dạng "F" mới được cải tiến của Python3 thay vì phương pháp

import textwrap
9 !:

import textwrap

var0 = 1
var1 = 2
var2 = 3
cmd = textwrap.dedent(f'''\
    line {var0}
    line {var1}
    line {var2}''')

print(cmd)

Ví dụ 2

Nếu bạn có nhiều đối số cho hàm

cmd = '''line {0}
line {1}
line {2}'''.format(1,2,3)

print(cmd)
0, bạn có thể đặt chúng trên nhiều dòng nếu muốn. Lưu ý rằng các đối số
cmd = '''line {0}
line {1}
line {2}'''.format(1,2,3)

print(cmd)
0 chiếm hai dòng ở đây:

cmd = textwrap.dedent('''\
    line {0}
    line {1}
    line {2}
    line {3}
    line {4}
    line {5}
    line {6}
    line {7}
    line {8}
    line {9}
    line {10}
    line {11}
    line {12}
    line {13}
    line {14}
    line {15}
    line {16}
    line {17}
    line {18}
    line {19}''').format(
        1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
        11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
    )

print(cmd)

Và tất nhiên, nếu các đối số

cmd = '''line {0}
line {1}
line {2}'''.format(1,2,3)

print(cmd)
0 thực sự dài, bạn cũng có thể đặt mỗi đối số trên dòng riêng của nó:

cmd = textwrap.dedent('''\
    line {0}
    line {1}
    line {2}
    line {3}
    line {4}
    line {5}
    line {6}
    line {7}
    line {8}
    line {9}
    line {10}
    line {11}
    line {12}
    line {13}
    line {14}
    line {15}
    line {16}
    line {17}
    line {18}
    line {19}''').format(
        100000000000000000000000000000000000000000000000000000000000000000001,
        100000000000000000000000000000000000000000000000000000000000000000002,
        100000000000000000000000000000000000000000000000000000000000000000003,
        100000000000000000000000000000000000000000000000000000000000000000004,
        100000000000000000000000000000000000000000000000000000000000000000005,
        100000000000000000000000000000000000000000000000000000000000000000006,
        100000000000000000000000000000000000000000000000000000000000000000007,
        100000000000000000000000000000000000000000000000000000000000000000008,
        100000000000000000000000000000000000000000000000000000000000000000009,
        100000000000000000000000000000000000000000000000000000000000000000010,
        100000000000000000000000000000000000000000000000000000000000000000011,
        100000000000000000000000000000000000000000000000000000000000000000012,
        100000000000000000000000000000000000000000000000000000000000000000013,
        100000000000000000000000000000000000000000000000000000000000000000014,
        100000000000000000000000000000000000000000000000000000000000000000015,
        100000000000000000000000000000000000000000000000000000000000000000016,
        100000000000000000000000000000000000000000000000000000000000000000017,
        100000000000000000000000000000000000000000000000000000000000000000018,
        100000000000000000000000000000000000000000000000000000000000000000019,
        100000000000000000000000000000000000000000000000000000000000000000020,
    )

print(cmd)

Ví dụ 3

Và thay vì điều này, như tôi đã nói trong câu trả lời ban đầu của mình (điều này giữ cho vết lõm đẹp nhưng có một chút tẻ nhạt để sử dụng):instead of this, as I stated in my original answer (which keeps nice-looking indentation but is a bit tedious to use):

print("\n\n" + 
      "########################\n" + 
      "PRINT DOCSTRING DEMO:\n" + 
      "########################")

... Bây giờ bạn có thể làm điều này!-cho phép các chuỗi đa dòng của tôi, khi được in, để "xếp hàng với cạnh trái của màn hình, trong khi vẫn trình bày chúng trong mã nguồn ở dạng thụt đầu dòng" (xem tài liệu chính thức ):do this!--which allows my multi-line strings, when printed, to "line up with the left edge of the display, while still presenting them in the source code in indented form" (see official documentation):

# Note: use the `\` below to prevent the implicit newline right after it from being printed.
print(textwrap.dedent("""

      ########################
      PRINT DOCSTRING DEMO:
      ########################\
      """))

Ví dụ 4

Và thay vì điều này, có một số sự thiếu bình thường trông xấu xí ngay giữa nó:instead of this, which has some ugly-looking lack-of-indentation right in the middle of it:

def printDocstrings1():
    """
    Print all document strings for this module, then exit.
    Params:  NA
    Returns: NA
    """

    # A LITTLE BIT UGLY, BUT IT WORKS.
    print("""
---------------------
Module Documentation:
---------------------
printDocstrings:{}
myFunc1:{}
class Math:{}
    __init__:{}
    add:{}
    subtract:{}""".format(
        printDocstrings1.__doc__,
        myFunc1.__doc__,
        Math.__doc__,
        Math.__init__.__doc__,
        Math.add.__doc__,
        Math.subtract.__doc__))

... Làm điều này, sử dụng

import textwrap
4 để giữ vết lõm đẹp trong suốt!:do this, which uses
import textwrap
4 to keep nice-looking indentation all throughout!:

import textwrap
0

Chạy mã trên

Bạn có thể chạy mã kiểm tra của tôi ở trên trong repo ERCAGUY_HELLO_WORLD của tôi tại đây: TextWrap_Practice_1.py.

Lệnh chạy:

import textwrap
1

OR:

import textwrap
2

Làm thế nào để Python xử lý các chuỗi đa dòng?

Một chuỗi đa dòng trong Python bắt đầu và kết thúc bằng ba trích dẫn đơn hoặc ba trích dẫn kép.Bất kỳ trích dẫn, tab hoặc dòng mới nào ở giữa Triple Trích dẫn Triple Trích dẫn được coi là một phần của chuỗi.Quy tắc thụt của Python cho các khối không áp dụng cho các dòng bên trong chuỗi đa dòng.begins and ends with either three single quotes or three double quotes. Any quotes, tabs, or newlines in between the “triple quotes” are considered part of the string. Python's indentation rules for blocks do not apply to lines inside a multiline string.

Cú pháp chính xác để chỉ định các chuỗi đa dòng trong Python là gì?

Chuỗi đa dòng Python là các chuỗi được chia thành nhiều dòng để tăng cường khả năng đọc của mã cho người dùng.Giá đỡ Python, dấu gạch chéo ngược và trích dẫn ba có thể được sử dụng để tạo các chuỗi đa dòng nhưng ở đây, người dùng cần đề cập đến việc sử dụng không gian giữa các chuỗi.