Εξαγωγή, συνένωση, διαχωρισμός, διαγραφή και αντικατάσταση συμβολοσειρών που περιέχουν νέες γραμμές στην Python

Επιχείρηση

Τα παρακάτω περιγράφουν τη λειτουργία των συμβολοσειρών που περιέχουν newlines στην Python.

  • Δημιουργία συμβολοσειράς που περιέχει newlines, εκτύπωση εξόδου (display)
    • χαρακτήρας νέας γραμμής (ένας ή και οι δύο χαρακτήρες CR και LF ανάλογα με το σύστημα)\n(LF), \r\n(CR+LF)
    • τριπλό απόσπασμα''',"""
    • Αν θέλετε να κάνετε εσοχή
  • Συνδέστε μια λίστα συμβολοσειρών με νέες γραμμές
  • Διαχωρισμός συμβολοσειράς σε newlines και λίστα:splitlines()
  • Αφαίρεση και αντικατάσταση κωδικών τροφοδοσίας γραμμής
  • Εκτύπωση εξόδου χωρίς νέα γραμμή στο τέλος

Δημιουργία συμβολοσειράς που περιέχει newlines, εκτύπωση εξόδου

χαρακτήρας νέας γραμμής (ένας ή και οι δύο χαρακτήρες CR και LF ανάλογα με το σύστημα) \n(LF), \r\n(CR+LF)

Η εισαγωγή ενός κώδικα τροφοδοσίας γραμμής μέσα σε μια συμβολοσειρά θα έχει ως αποτέλεσμα μια νέα γραμμή.

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

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

Οι κωδικοί τροφοδοσίας γραμμής μπορούν να χρησιμοποιηθούν με τους ακόλουθους τρόπους. Ορισμένοι συντάκτες σάς επιτρέπουν να επιλέξετε έναν κωδικό αλλαγής γραμμής.

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

τριπλό απόσπασμα ''',"""

Εάν χρησιμοποιούνται τριπλά εισαγωγικά για να περικλείσουν το αλφαριθμητικό, αυτό θα είναι ένα αλφαριθμητικό ως έχει, συμπεριλαμβανομένων των νέων γραμμών.

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

Αν θέλετε να κάνετε εσοχή

Τα τριπλά εισαγωγικά είναι επίσης κενά σε μια συμβολοσειρά, οπότε αν προσπαθήσετε να γράψετε καθαρά σε κώδικα και να κάνετε εσοχή όπως φαίνεται παρακάτω, θα εισαχθούν περιττά κενά.

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

Με τη χρήση μιας backslash για να αγνοηθούν οι νέες γραμμές στον κώδικα και να γίνει μια γραμμή συνέχειας, μπορεί να γραφτεί ως εξής

Κλείστε κάθε γραμμή με '' ή «» και προσθέστε έναν χαρακτήρα νέας γραμμής ←n στο τέλος της πρότασης.

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

Εδώ, η σύνταξη είναι ότι τα διαδοχικά γραμματικά αλφαριθμητικά συνδέονται μεταξύ τους. Δείτε το ακόλουθο άρθρο για λεπτομέρειες.

Αν θέλετε να προσθέσετε εσοχή σε μια συμβολοσειρά, απλά προσθέστε ένα κενό στη συμβολοσειρά σε κάθε γραμμή.

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

Επιπλέον, δεδομένου ότι η αλλαγή γραμμής μπορεί να γίνει ελεύθερα στις παρενθέσεις, τα ακόλουθα μπορούν να γραφούν χρησιμοποιώντας παρενθέσεις αντί για κάθετες.

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

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

Αν θέλετε απλώς να ευθυγραμμίσετε την αρχή μιας γραμμής, απλά προσθέστε μια backslash στην πρώτη γραμμή των τριπλών εισαγωγικών.

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

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

Συνδέστε μια λίστα συμβολοσειρών με νέες γραμμές

Η μέθοδος join() μπορεί να χρησιμοποιηθεί για τη συνένωση μιας λίστας συμβολοσειρών σε μια ενιαία συμβολοσειρά.

Όταν η join() καλείται από έναν χαρακτήρα νέας γραμμής, κάθε στοιχείο συμβολοσειράς συνδέεται με μια νέα γραμμή.

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'

Όπως στο παραπάνω παράδειγμα, η ενσωματωμένη συνάρτηση repr() μπορεί να χρησιμοποιηθεί για τον έλεγχο των συμβολοσειρών που περιέχουν κωδικούς νέας γραμμής ως έχουν.

Διαχωρισμός συμβολοσειράς σε newlines και λίστα: splitlines()

Η μέθοδος string splitlines() μπορεί να χρησιμοποιηθεί για το διαχωρισμό μιας συμβολοσειράς σε μια λίστα νέων γραμμών.

Η splitlines() θα χωρίσει οποιονδήποτε από τους ακόλουθους κωδικούς αλλαγής γραμμής. Οι κάθετες καρτέλες και τα διαλείμματα σελίδων χωρίζονται επίσης.

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

Αφαίρεση και αντικατάσταση κωδικών τροφοδοσίας γραμμής

Συνδυάζοντας την splitlines() και την join(), είναι δυνατή η αφαίρεση (αφαίρεση) κωδικών νέων γραμμών από μια συμβολοσειρά που περιέχει νέες γραμμές ή η αντικατάστασή τους με άλλες συμβολοσειρές.

s = 'Line1\nLine2\r\nLine3'

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

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

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

Είναι επίσης δυνατή η ομαδική αλλαγή των κωδικών τροφοδοσίας γραμμής. Ακόμη και αν οι κωδικοί αλλαγής γραμμής είναι μικτοί ή άγνωστοι, μπορούν να διαχωριστούν χρησιμοποιώντας την splitlines() και στη συνέχεια να συνδεθούν με τον επιθυμητό κωδικό αλλαγής γραμμής.

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

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

Όπως αναφέρθηκε παραπάνω, η splitlines() θα χωρίσει οποιονδήποτε κώδικα νέας γραμμής, οπότε δεν χρειάζεται να ανησυχείτε ιδιαίτερα για τους κώδικες νέας γραμμής στην περίπτωση της μεθόδου που συνδυάζει τις splitlines() και join().

Εάν ο κώδικας νέας γραμμής είναι σαφής, μπορεί επίσης να αντικατασταθεί από τη μέθοδο replace(), η οποία αντικαθιστά το αλφαριθμητικό.

s = 'Line1\nLine2\nLine3'

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

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

Σημειώστε, ωστόσο, ότι δεν θα λειτουργήσει εάν περιέχει διαφορετικούς κωδικούς τροφοδοσίας γραμμής από τους αναμενόμενους.

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'

Είναι δυνατή η αντικατάσταση πολλαπλών κωδικών νέας γραμμής με επανάληψη της replace(), αλλά δεν θα λειτουργήσει αν η σειρά είναι λανθασμένη επειδή το «\r\n» περιέχει το «\n». Η μέθοδος που συνδυάζει την splitlines() και την join() που περιγράφεται παραπάνω είναι ασφαλέστερη επειδή δεν χρειάζεται να ανησυχείτε για τους κωδικούς αλλαγής γραμμής.

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

Χρησιμοποιήστε τη μέθοδο rstrip() για να αφαιρέσετε τους κωδικούς τροφοδοσίας γραμμής στο τέλος μιας πρότασης.Η rstrip() είναι μια μέθοδος για την αφαίρεση των χαρακτήρων λευκού χώρου (συμπεριλαμβανομένων των τροφοδοσιών γραμμής) στο δεξί άκρο μιας συμβολοσειράς.

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

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

Εκτύπωση εξόδου χωρίς νέα γραμμή στο τέλος

Η συνάρτηση print() προσθέτει από προεπιλογή μια νέα γραμμή στο τέλος. Επομένως, εάν η print() εκτελείται διαδοχικά, κάθε αποτέλεσμα εξόδου θα εμφανίζεται σε νέα γραμμή.

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

Αυτό συμβαίνει επειδή η προεπιλεγμένη τιμή του ορίσματος end της print(), το οποίο καθορίζει τη συμβολοσειρά που θα προστεθεί στο τέλος, είναι το σύμβολο της νέας γραμμής.

Αν δεν θέλετε μια νέα γραμμή στο τέλος, απλά ορίστε το όρισμα end σε μια κενή συμβολοσειρά και η έξοδος θα εξάγεται χωρίς νέα γραμμή στο τέλος.

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

Το όρισμα end μπορεί να είναι οποιαδήποτε συμβολοσειρά.

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

Ωστόσο, αν θέλετε να συνδέσετε συμβολοσειρές για έξοδο, είναι ευκολότερο να συνδέσετε τις αρχικές συμβολοσειρές παρά να τις καθορίσετε στο όρισμα τέλους της print(). Ανατρέξτε στο ακόλουθο άρθρο.

Copied title and URL