I-output, pagdugtungin, hatiin, tanggalin, at palitan ang mga string na naglalaman ng mga bagong linya sa Python

Negosyo

Ang sumusunod ay naglalarawan sa pagpapatakbo ng mga string na naglalaman ng mga bagong linya sa Python.

  • Lumikha ng string na naglalaman ng mga bagong linya, naka-print na output (display)
    • newline character (alinman o pareho ng CR at LF depende sa system)\n(LF),\r\n(CR+LF)
    • triple quote'',"""
    • Kung gusto mong mag-indent
  • Pagsamahin ang isang listahan ng mga string sa mga bagong linya
  • Hatiin ang string sa mga bagong linya at ilista:splitlines()
  • Alisin at palitan ang mga line feed code
  • I-print ang output nang hindi sumusunod sa bagong linya

Lumikha ng string na naglalaman ng mga bagong linya, i-print ang output

newline character (alinman o pareho ng CR at LF depende sa system)\n(LF),\r\n(CR+LF)

Ang pagpasok ng isang line feed code sa loob ng isang string ay magreresulta sa isang bagong linya.

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

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

Maaaring gamitin ang mga line feed code sa mga sumusunod na paraan. Binibigyang-daan ka ng ilang editor na pumili ng line break code.

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

triple quote'',"""

Kung triple quote ang ginagamit upang ilakip ang string, ito ay magiging isang string kung saan, kabilang ang mga bagong linya.

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

Kung gusto mong mag-indent

Ang mga triple quote ay mga puwang din sa isang string, kaya kung susubukan mong magsulat ng maayos sa code at indent gaya ng ipinapakita sa ibaba, maglalagay ng mga hindi kinakailangang puwang.

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

Sa pamamagitan ng paggamit ng backslash upang huwag pansinin ang mga bagong linya sa code at gawin itong isang linya ng pagpapatuloy, maaari itong isulat bilang mga sumusunod

Lagyan ng ” o “” ang bawat linya at magdagdag ng bagong linyang character ←n sa dulo ng pangungusap.

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

Dito, ang syntax ay ang magkakasunod na string literals ay pinagsama-sama. Tingnan ang sumusunod na artikulo para sa mga detalye.

Kung gusto mong magdagdag ng indentation sa isang string, magdagdag lang ng puwang sa string sa bawat linya.

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

Bilang karagdagan, dahil ang mga line break ay maaaring malayang gawin sa mga bracket, ang mga sumusunod ay maaaring isulat gamit ang mga panaklong sa halip na mga backslashes.

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

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

Kung gusto mo lang ihanay ang simula ng isang linya, magdagdag lang ng backslash sa unang linya ng triple quotes.

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

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

Pagsamahin ang isang listahan ng mga string sa mga bagong linya

Ang string method join() ay maaaring gamitin upang pagsamahin ang isang listahan ng mga string sa isang string.

Kapag ang join() ay tinawag mula sa isang newline na character, ang bawat elemento ng string ay pinagsama-sama sa isang newline.

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'

Tulad ng halimbawa sa itaas, ang built-in na function na repr() ay maaaring gamitin upang suriin ang mga string na naglalaman ng mga newline code kung ano ang mga ito.

Hatiin ang string sa mga bagong linya at ilista:splitlines()

Ang string method splitlines() ay maaaring gamitin upang hatiin ang isang string sa isang listahan ng mga bagong linya.

hatiin ng splitlines() ang alinman sa mga sumusunod na line break code. Ang mga patayong tab at page break ay nahahati din.

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

Alisin at palitan ang mga line feed code

Sa pamamagitan ng pagsasama-sama ng splitlines() at join(), posibleng tanggalin (alisin) ang mga newline code mula sa isang string na naglalaman ng mga newline o palitan ang mga ito ng iba pang mga string.

s = 'Line1\nLine2\r\nLine3'

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

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

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

Posible rin ang pagbabago ng batch ng mga line feed code. Kahit na ang mga line break code ay halo-halong o hindi alam, maaari silang hatiin gamit ang splitlines() at pagkatapos ay pagsamahin sa nais na line break code.

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

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

Tulad ng nabanggit sa itaas, ang splitlines() ay maghahati sa alinman sa newline code, kaya hindi na kailangang maging partikular na alalahanin tungkol sa mga newline code sa kaso ng paraan na pinagsasama ang splitlines() at join().

Kung malinaw ang newline code, maaari din itong palitan ng replace() na paraan, na pumapalit sa string.

s = 'Line1\nLine2\nLine3'

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

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

Tandaan, gayunpaman, na hindi ito gagana kung naglalaman ito ng ibang mga line feed code kaysa sa inaasahan.

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'

Posibleng palitan ang maraming newline code sa pamamagitan ng pag-uulit ng replace(), ngunit hindi ito gagana kung mali ang pagkakasunod-sunod dahil naglalaman ang “\r\n” ng “\n”. Ang paraan ng pagsasama-sama ng splitlines() at join() na inilarawan sa itaas ay mas ligtas dahil hindi na kailangang mag-alala tungkol sa mga line feed code.

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

Gamitin ang rstrip() na paraan upang alisin ang mga line feed code sa dulo ng isang pangungusap. Ang rstrip() ay isang paraan upang alisin ang mga character na white space (kabilang ang mga line feed) sa kanang dulo ng isang string.

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

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

I-print ang output nang hindi sumusunod sa bagong linya

Ang print() function ay nagdaragdag ng trailing newline bilang default. Samakatuwid, kung ang print() ay naisakatuparan, ang bawat resulta ng output ay ipapakita sa isang bagong linya.

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

Ito ay dahil ang default na halaga ng argument na dulo ng print(), na tumutukoy sa string na idaragdag sa dulo, ay ang newline na simbolo.

Kung hindi mo gusto ang isang bagong linya sa dulo, itakda lamang ang pagtatapos ng argumento sa isang walang laman na string, at ang output ay magiging output nang walang bagong linya sa dulo.

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

Ang pagtatapos ng argumento ay maaaring maging anumang string.

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

Gayunpaman, kung gusto mong pagsamahin ang mga string para sa output, mas madaling pagsamahin ang orihinal na mga string kaysa tukuyin ang mga ito sa dulong argumento ng print(). Tingnan ang sumusunod na artikulo.