Извеждане, конкатениране, разделяне, изтриване и заместване на низове, съдържащи нови редове, в Python

Бизнес

По-долу е описана работата с низове, съдържащи нови редове, в Python.

  • Създаване на низ, съдържащ нови редове, отпечатване на изхода (дисплей)
    • символ за нов ред (един от двата символа CR и LF в зависимост от системата)\n(LF), \r\n(CR+LF)
    • троен цитат''',"""
    • Ако искате да отстъпите
  • Конкатениране на списък от низове с нови редове
  • Разделяне на низ на нови редове и списък:splitlines()
  • Премахване и замяна на кодовете за подаване на линия
  • Отпечатване на изхода без завършващ нов ред

Създаване на низ, съдържащ нови редове, отпечатване на изхода

символ за нов ред (един от двата символа 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
#     

Като използвате обратна наклонена черта, за да игнорирате новите редове в кода и да го превърнете в продължителен ред, той може да бъде записан по следния начин

Затворете всеки ред с „“ или „“ и добавете символа за нов ред ←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

Ако искате само да подравните началото на реда, просто добавете обратна наклонена черта към първия ред от тройни кавички.

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() може да се използва за проверка на низове, които съдържат кодове за нов ред, както са.

Разделяне на низ на нови редове и списък: splitlines()

Методът за разделяне на низове 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(). Вижте следната статия.