Thụt lề thích hợp cho các chuỗi đa dòng trong Python #
Để thụt lề đúng chuỗi đa dòng:
- Thêm một dấu gạch chéo ngược ở cuối dòng đầu tiên.
- Đóng chuỗi đa dòng trên dòng cuối cùng.
- Sử dụng các phương thức
dedent[]
và
0 nếu bạn cần dành hoặc thụt lề chuỗi đa dòng.Copied!
multiline_str = """\ first second third""" print[multiline_str]
Copied!
from textwrap import dedent, indent from inspect import cleandoc multiline_str = """\ first second third""" # 👇️ with indentation # first # second # third print[multiline_str] # 👇️ without indentation # first # second # third print[dedent[multiline_str]] # 👇️ indent the multiline string a specific number of spaces # first # second # third print[indent[multiline_str, ' ']] # 👇️ using inspect.cleandoc # [removes empty lines at beginning and end, and leading whitespace] # first # second # third print[cleandoc[multiline_str]]
Điều đầu tiên cần lưu ý khi sử dụng chuỗi đa dòng là thêm dấu gạch chéo ngược ở cuối dòng đầu tiên.
Copied!
multiline_str = """\ first second third""" print[multiline_str]
Nếu bạn không thêm dấu gạch chéo ngược, bạn sẽ nhận thấy rằng một ký tự mới được thêm vào chuỗi.
Đảm bảo đóng chuỗi đa dòng trên cùng một dòng.
Copied!
multiline_str = """\ first second third""" # 👈️ close on same line print[multiline_str]
Nếu bạn không đóng chuỗi đa dòng trên cùng một dòng, một ký tự mới được thêm vào ở cuối chuỗi.
Bạn có thể sử dụng các phương thức Copied! Copied!
1 và multiline_str = """\
first
second
third"""
print[multiline_str]
2 để thụt vào hoặc dành chuỗi đa dòng.multiline_str = """\
first
second
third"""
print[multiline_str]
Copied!
from textwrap import dedent, indent multiline_str = """\ first second third""" # 👇️ without indentation # first # second # third print[dedent[multiline_str]] # 👇️ indent the multiline string a specific number of spaces # first # second # third print[indent[multiline_str, ' ']]
Phương thức TextWrap.Dedent lấy một chuỗi đa dòng và loại bỏ khoảng trắng hàng đầu chung khỏi mọi dòng của chuỗi.
Phương pháp này được sử dụng để hiển thị các chuỗi đa dòng được thụt vào mã nguồn mà không có bất kỳ thụt lề nào.
Phương thức TextWrap.Indent lấy một chuỗi đa dòng và tiền tố và thêm tiền tố vào đầu mỗi dòng của chuỗi.
Theo mặc định, phương thức thêm tiền tố vào đầu mỗi dòng không chỉ bao gồm khoảng trắng.
Bạn cũng có thể sử dụng phương thức Copied!
3 nếu bạn muốn loại bỏ các dòng trống ở đầu và cuối của chuỗi đa dòng và khoảng trắng hàng đầu.multiline_str = """\
first
second
third"""
print[multiline_str]
Copied!
from inspect import cleandoc multiline_str = """ first second third """ # # first # second # third # print[multiline_str] # first # second # third print[cleandoc[multiline_str]]
Tôi cố tình không thêm dấu gạch chéo ngược ở cuối dòng đầu tiên và không đóng chuỗi đa dòng trên cùng một dòng.
Lưu ý rằng phương thức kiểm tra.cleandoc đã loại bỏ các dòng trống ở đầu và cuối chuỗi và loại bỏ khoảng trắng hàng đầu.
Nếu bạn không muốn loại bỏ các dòng trống ở đầu và cuối chuỗi đa dòng, hãy sử dụng phương thức
2.Copied!
multiline_str = """\ first second third""" print[multiline_str]
Thay đổi vết lõm của chuỗi đa dòng
Tín dụng: Tom tốt
Vấn đề
Bạn có một chuỗi được tạo thành từ nhiều dòng và bạn cần xây dựng một chuỗi khác từ nó, thêm hoặc loại bỏ các không gian hàng đầu trên mỗi dòng để vết lõm của mỗi dòng là một số khoảng trống tuyệt đối.
Dung dịch
Chúng tôi không cần
5 cho việc này. Mô -đunCopied!
multiline_str = """\ first second third""" print[multiline_str]
6 [hoặc các phương thức chuỗi, trong Python 2.0 trở lên] là khá đủ:Copied!
multiline_str = """\ first second third""" print[multiline_str]
import string def reindent[s, numSpaces]: s = string.split[s, '\n'] s = [[numSpaces * ' '] + string.lstrip[line] for line in s] s = string.join[s, '\n'] return s
Thảo luận
Khi làm việc với văn bản, có thể cần phải thay đổi mức thụt của một khối. Mã công thức này có một chuỗi đa dòng và thêm hoặc loại bỏ các không gian dẫn đầu trên mỗi dòng để mức thụt của mỗi dòng của khối phù hợp với một số không gian tuyệt đối. Ví dụ:
>>> x = """line one ... line two ... and line three ... """ >>> print x line one line two and line three >>> print reindent[x, 8] line one line two and line three
Ngay cả khi các dòng trong
7 ban đầu được thụt vào khác nhau, công thức này làm cho vết lõm của chúng đồng nhất. Đây đôi khi là những gì chúng ta muốn, và đôi khi không. Một nhu cầu thường xuyên là điều chỉnh lượng không gian hàng đầu trong mỗi dòng, để sự thụt tương đối của mỗi dòng trong khối được bảo tồn. Điều này cũng không khó, đối với các giá trị tích cực hoặc âm của điều chỉnh. Tuy nhiên, các giá trị âm cần kiểm tra để đảm bảo rằng không có không gian không được đánh bắt từ đầu dòng. Do đó, chúng tôi cũng có thể chia chức năng thành hai chức năng để thực hiện các phép biến đổi, cộng với một chức năng để đo số lượng không gian hàng đầu của mỗi dòng và trả về kết quả dưới dạng danh sách:Copied!
multiline_str = """\ first second third""" print[multiline_str]
def addSpaces[s, numAdd]: white = " "*numAdd return white + white.join[s.splitlines[1]] def delSpaces[s, numDel]: def aux[line, numDel=numDel, white=" "*numDel]: if line[:numDel] != white: raise ValueError, "removing more spaces than there are!" return line[numDel:] return ''.join[map[aux, s.splitlines[1]]] def numSpaces[s]: return [len[line]-len[line.lstrip[]] for line in s.splitlines[ ]]
Cách tiếp cận thay thế này dựa trên phương thức chuỗi
8 [và do đó yêu cầu Python 2.0 trở lên, giống như bất kỳ công thức nào khác bằng các phương thức chuỗi và/hoặc danh sách toàn diện], tương tự như phân chia trênCopied!
multiline_str = """\ first second third""" print[multiline_str]
9, với khả năng thêm Trên mỗi dòng khi được gọi với một đối số thực sự. Điều này thường không quan trọng [ví dụ, tuyên bố cuối cùng trong ____2020 có thể dễ dàng trả lạiCopied!
multiline_str = """\ first second third""" print[multiline_str]
1], nhưng đôi khi hóa ra là [Copied!
multiline_str = """\ first second third""" # 👈️ close on same line print[multiline_str]
2 không thể ngắn và ngọt ngào nếu không có khả năng này của phương pháp chuỗiCopied!
multiline_str = """\ first second third""" # 👈️ close on same line print[multiline_str]
8].Copied!
multiline_str = """\ first second third""" print[multiline_str]
Ví dụ, ở đây, cách thức chúng ta có thể kết hợp các chức năng này để xây dựng một chức năng khác để xóa đủ các không gian dẫn đầu khỏi mỗi dòng để đảm bảo rằng đường thẳng của khối trở nên nhỏ nhất trở nên khó khăn, trong khi bảo tồn các vết lõm tương đối của tất cả các dòng khác:
def unIndentBlock[s]: return delSpaces[s, min[numSpaces[s]]]
Xem thêm
Phần tham chiếu thư viện về các loại trình tự.Library Reference section on sequence types.