Xuất, nối, tách, xóa và thay thế các chuỗi có chứa dòng mới trong Python

Kinh doanh

Phần sau mô tả hoạt động của chuỗi chứa dòng mới trong Python.

  • Tạo chuỗi chứa dòng mới, in ra (hiển thị)
    • ký tự dòng mới (một hoặc cả hai CR và LF tùy thuộc vào hệ thống)\n(LF),\r\n(CR + LF)
    • dấu ngoặc kép'',"""
    • Nếu bạn muốn thụt lề
  • Nối danh sách các chuỗi với các dòng mới
  • Chia chuỗi thành các dòng mới và danh sách:splitlines()
  • Xóa và thay thế mã nguồn cấp dòng
  • In đầu ra mà không có dòng mới theo sau

Tạo chuỗi chứa dòng mới, in đầu ra

ký tự dòng mới (một hoặc cả hai CR và LF tùy thuộc vào hệ thống)\n(LF),\r\n(CR + LF)

Chèn mã nguồn cấp dòng trong một chuỗi sẽ dẫn đến một dòng mới.

s = 'Line1\nLine2\nLine3'
print(s)
# Line1
# Line2
# Line3

s = 'Line1\r\nLine2\r\nLine3'
print(s)
# Line1
# Line2
# Line3

Mã nguồn cấp dòng có thể được sử dụng theo những cách sau. Một số trình chỉnh sửa cho phép bạn chọn mã ngắt dòng.

Macを含むUnix系\n(LF)
Windows系\r\n(CR + LF)

dấu ngoặc kép'',"""

Nếu dấu ngoặc kép được sử dụng để bao quanh chuỗi, nó sẽ là một chuỗi như vậy, bao gồm cả các dòng mới.

s = '''Line1
Line2
Line3'''
print(s)
# Line1
# Line2
# Line3

Nếu bạn muốn thụt lề

Dấu ngoặc kép cũng là khoảng trắng trong một chuỗi, vì vậy nếu bạn cố gắng viết gọn gàng trong mã và thụt lề như hình dưới đây, những khoảng trắng không cần thiết sẽ được chèn vào.

s = '''
    Line1
    Line2
    Line3
    '''
print(s)
# 
#     Line1
#     Line2
#     Line3
#     

Bằng cách sử dụng dấu gạch chéo ngược để bỏ qua các dòng mới trong mã và biến nó thành dòng tiếp tục, nó có thể được viết như sau

Đặt mỗi dòng bằng ” hoặc “” và thêm một ký tự dòng mới ← n ở cuối câu.

s = 'Line1\n'\
    'Line2\n'\
    'Line3'
print(s)
# Line1
# Line2
# Line3

Ở đây, cú pháp là các ký tự chuỗi liên tiếp được nối với nhau. Xem chi tiết bài viết sau.

Nếu bạn muốn thêm thụt đầu dòng trong một chuỗi, chỉ cần thêm khoảng trắng vào chuỗi trong mỗi dòng.

s = 'Line1\n'\
    '    Line2\n'\
    '        Line3'
print(s)
# Line1
#     Line2
#         Line3

Ngoài ra, vì các dấu ngắt dòng có thể được thực hiện tự do trong dấu ngoặc, nên phần sau có thể được viết bằng dấu ngoặc đơn thay vì dấu gạch chéo ngược.

s = ('Line1\n'
     'Line2\n'
     'Line3')
print(s)
# Line1
# Line2
# Line3

s = ('Line1\n'
     '    Line2\n'
     '        Line3')
print(s)
# Line1
#     Line2
#         Line3

Nếu bạn chỉ muốn căn chỉnh đầu dòng, chỉ cần thêm dấu gạch chéo ngược vào dòng đầu tiên của dấu ngoặc kép.

s = '''\
Line1
Line2
Line3'''
print(s)
# Line1
# Line2
# Line3

s = '''\
Line1
    Line2
        Line3'''
print(s)
# Line1
#     Line2
#         Line3

Nối danh sách các chuỗi với các dòng mới

Phương thức chuỗi join () có thể được sử dụng để nối một danh sách các chuỗi thành một chuỗi duy nhất.

Khi join () được gọi từ một ký tự dòng mới, mỗi phần tử chuỗi được nối với một dòng mới.

l = ['Line1', 'Line2', 'Line3']

s_n = '\n'.join(l)
print(s_n)
# Line1
# Line2
# Line3

print(repr(s_n))
# 'Line1\nLine2\nLine3'

s_rn = '\r\n'.join(l)
print(s_rn)
# Line1
# Line2
# Line3

print(repr(s_rn))
# 'Line1\r\nLine2\r\nLine3'

Như trong ví dụ trên, hàm có sẵn repr () có thể được sử dụng để kiểm tra các chuỗi có chứa mã dòng mới như chúng vốn có.

Chia chuỗi thành các dòng mới và danh sách:splitlines()

Phương thức chuỗi splitlines () có thể được sử dụng để chia một chuỗi thành một danh sách các dòng mới.

splitlines () sẽ chia bất kỳ mã ngắt dòng nào sau đây. Các tab dọc và ngắt trang cũng được chia nhỏ.

  • \n
  • \r\n
  • \v
  • \f
s = 'Line1\nLine2\r\nLine3'
print(s.splitlines())
# ['Line1', 'Line2', 'Line3']

Xóa và thay thế mã nguồn cấp dòng

Bằng cách kết hợp các dòng chia () và join (), có thể xóa (loại bỏ) các mã dòng mới khỏi một chuỗi chứa các dòng mới hoặc thay thế chúng bằng các chuỗi khác.

s = 'Line1\nLine2\r\nLine3'

print(''.join(s.splitlines()))
# Line1Line2Line3

print(' '.join(s.splitlines()))
# Line1 Line2 Line3

print(','.join(s.splitlines()))
# Line1,Line2,Line3

Cũng có thể thay đổi hàng loạt mã nguồn cấp dữ liệu dòng. Ngay cả khi các mã ngắt dòng là hỗn hợp hoặc không xác định, chúng có thể được tách ra bằng cách sử dụng splitlines () và sau đó được nối với mã ngắt dòng mong muốn.

s_n = '\n'.join(s.splitlines())
print(s_n)
# Line1
# Line2
# Line3

print(repr(s_n))
# 'Line1\nLine2\nLine3'

Như đã đề cập ở trên, splitlines () sẽ chia một trong hai mã dòng mới, vì vậy không cần phải quan tâm đặc biệt đến mã dòng mới trong trường hợp phương thức kết hợp splitlines () và join ().

Nếu mã dòng mới rõ ràng, nó cũng có thể được thay thế bằng phương thức Replace (), phương thức thay thế chuỗi.

s = 'Line1\nLine2\nLine3'

print(s.replace('\n', ''))
# Line1Line2Line3

print(s.replace('\n', ','))
# Line1,Line2,Line3

Tuy nhiên, lưu ý rằng nó sẽ không hoạt động nếu nó chứa các mã nguồn cấp dòng khác với mong đợi.

s = 'Line1\nLine2\r\nLine3'

s_error = s.replace('\n', ',')
print(s_error)
# ,Line3Line2

print(repr(s_error))
# 'Line1,Line2\r,Line3'

s_error = s.replace('\r\n', ',')
print(s_error)
# Line1
# Line2,Line3

print(repr(s_error))
# 'Line1\nLine2,Line3'

Có thể thay thế nhiều mã dòng mới bằng cách lặp lại Replace (), nhưng nó sẽ không hoạt động nếu thứ tự sai vì “\ r \ n” chứa “\ n”. Phương pháp kết hợp splitlines () và join () được mô tả ở trên an toàn hơn vì không cần lo lắng về mã nguồn cấp dòng.

s = 'Line1\nLine2\r\nLine3'

print(s.replace('\r\n', ',').replace('\n', ','))
# Line1,Line2,Line3

s_error = s.replace('\n', ',').replace('\r\n', ',')
print(s_error)
# ,Line3Line2

print(repr(s_error))
# 'Line1,Line2\r,Line3'

print(','.join(s.splitlines()))
# Line1,Line2,Line3

Sử dụng phương thức rstrip () để xóa mã nguồn cấp dữ liệu dòng ở cuối câu. rstrip () là một phương thức để xóa các ký tự khoảng trắng (bao gồm cả nguồn cấp dòng) ở cuối bên phải của một chuỗi.

s = 'aaa\n'
print(s + 'bbb')
# aaa
# bbb

print(s.rstrip() + 'bbb')
# aaabbb

In đầu ra mà không có dòng mới theo sau

Theo mặc định, hàm print () thêm một dòng mới ở cuối. Do đó, nếu print () được thực thi liên tiếp, mỗi kết quả đầu ra sẽ được hiển thị trên một dòng mới.

print('a')
print('b')
print('c')
# a
# b
# c

Điều này là do giá trị mặc định của đối số end of print (), chỉ định chuỗi sẽ được thêm vào cuối, là ký hiệu dòng mới.

Nếu bạn không muốn có dòng mới ở cuối, chỉ cần đặt kết thúc đối số thành một chuỗi trống và kết quả sẽ được xuất ra mà không có dòng mới ở cuối.

print('a', end='')
print('b', end='')
print('c', end='')
# abc

Kết thúc đối số có thể là bất kỳ chuỗi nào.

print('a', end='-')
print('b', end='-')
print('c')
# a-b-c

Tuy nhiên, nếu bạn muốn nối các chuỗi cho đầu ra, thì việc nối các chuỗi ban đầu sẽ dễ dàng hơn là chỉ định chúng trong đối số cuối của print (). Xem bài viết sau.