koddla

Yazılımcıları bilgi ile güçlendirir.

Python’da dizelerdeki boşluk nasıl kırpılır?

Bir string’ten boşluk (ve sekmeler) karakterlerini kırpmak istiyoruz. Örneğin: "\t örnek string\t" → "örnek string" dönüşümünü yapalım. C#’a aşina iseniz bunu trim() metodu ile yaptığınızı hatırlarsınız. Python’da trim() metodu bulunmuyor, ancak buna eş değer fonksiyonlar var.

Her iki taraftaki boşluklar için str.strip kullanabiliriz.

>>> ' Hello '.strip()
'Hello'
>>> ' Hello'.strip()
'Hello'
>>> 'Bob has a cat'.strip()
'Bob has a cat'
>>> '   Hello   '.strip()  # tüm boşlukları sildi
'Hello'

Unutmayın str.strip() tüm boşluk karakterlerini kaldırır. Buna tab ve yeni satır karakterleri de dahil. Sadece boşluk karakterlerini kaldırmak isteseydik strip’e aşağıdaki gibi bir argüman verirdik:

>>> "  Hello\n  ".strip(" ")
'Hello\n'

Hatta, strip sadece boşluk karakterlerini değil, verdiğimiz argümana eş tüm karakterleri siler:

# tüm virgül , nokta . ve tire - karakterlerini sil
title = title.strip(',.-')

Sadece sağ taraftaki karakterleri silmek için rstrip :

s = s.rstrip()

ve, benzer şekilde, sol taraftaki boşluk için lstrip :

s = s.lstrip()

kullanırız.

strip ile boşluk kaldırma örnekleri

Örneğin telefon numarasındaki + karakterini silelim:

In [1]: phone_number = "+14158889999"

In [2]: phone_number.strip('+')
Out[2]: '14158889999'

string başındaki ve sonundaki eşleşen kelimeleri/harfleri/karakterleri kaldırmak için kullanabiliriz:

>>> "abcdefabcdefabc".strip("cba")
'defabcdef'

Bir url’den .com ifadesini silme:

url = 'abcdc.com'
print(url.rstrip('.com'))

Python 3.8 veya daha eski sürümlerinde ayrıca endswith ve dilimleme ile de aynı şeyi yapabilirdik:

url = 'abcdc.com'
if url.endswith('.com'):
    url = url[:-4]

Python 3.9 veya daha yeni sürümlerde ise removeprefix ve removesuffix metotlarını kullanabiliriz:

url = 'abcdc.com'
url.removesuffix('.com')    # 'abcdc'
url.removeprefix('abcdc.')  # 'com'

Satır sonundaki yeni satır karakterini kaldırma

Önce rstrip() ile bakalım: (Python 2 ve Python 3 dökümanları)

>>> 'test string\n'.rstrip()
'test string'

Python’un rstrip() metodu sondaki tüm boşlukları (yeni satır karakteri de dahil) varsayılan olarak siler.

>>> 'test string \n \r\n\n\r \n\n'.rstrip()
'test string'

Sadece yeni satırları silmek isteseydik:

>>> 'test string \n \r\n\n\r \n\n'.rstrip('\n')
'test string \n \r\n\n\r '

rstrip()‘in haricinde bunu strip() ile de yapabilirdik. Hatta yeni satır karakteri text başındaysa lstrip() ile de bu işi gerçekleştirebiliriz:

>>> s = "   \n\r\n  \n  abc   def \n\r\n  \n  "
>>> s.strip()
'abc   def'
>>> s.lstrip()
'abc   def \n\r\n  \n  '
>>> s.rstrip()
'   \n\r\n  \n  abc   def'

Metin ortasındaki boşluk karakterleri kaldırma

Yukarıdaki örnekler dizeleri yalnızca dizelerin sol ve sağ taraflarından kaldırır. Yani str.strip() başlangıç ve sondaki karakterler için etki ederken string ortasındaki karakterlere bir şey yapmaz

words=input("Bir input girin:")
# Örneğin bir kullanıcı aşağıdaki gibi bir input girsin:
# input = "   he llo, ho w are y ou  "
n=words.strip()
print(n)
# Çıktı "he llo, ho w are y ou" - olacaktır. başlangıç/son karakterleri silindi ama ortadaki karakterlere bir şey olmadı

Bunun yerine str.replace() kullanırsak diğer karakterlere de etki edebiliriz: Aşağıdaki kod ile str.replace()’in genel bir kullanımına bakalım:

def whitespace(words):
    r=words.replace(' ','') # tüm boşlukları kaldır
    n=r.replace(',','|') # virgülü değiştir 
    return n
def run():
    words=input("Bir input girin:") # kullanıcı inputu al
    m=whitespace(words)
    return m
print(run())
output- 'hello|howareyou'

Yine, dizenin ortasındaki karakterleri kaldırmak istiyorsak, re.sub kullanabiliriz:

import re
print(re.sub('[\s+]', '', s))

Dolayısıyla aşağıdaki çıktıyı alırız :

astringexample

Belirli bir karakterden sonra gelen karakterleri silmek

Bunun için önce index metodunu çağırıp bulmak istediğimiz karakterin ilk karşılığına bakalım. Aşağıdaki örnek için değişkenimizi şöyle tanımladık:

mystring = "This is my string\x00\x00\x00hi there\x00"

ilk karşılaştığımız \x00 karakterine index('\x00') ile ulaşırız. Ardından string’i dilimleriz:

mystring = "This is my string\x00\x00\x00hi there\x00"
terminator = mystring.index('\x00')

print(mystring[:terminator])
# "This is my string"

Özetlemek gerekirse:

my_string.strip()

tüm baştaki ve sondaki boşluk karakterlerini (\n\r\t\f, ” ” vb) silecektir.

Daha fazla esneklik için ise aşağıdakileri tercih edebiliriz:

  • Baştaki karakterler için: my_string.lstrip()
  • Sondaki karakterler için: my_string.rstrip()
  • Özel karakterleri silmek için: chars: my_string.strip('\n') veya my_string.lstrip('\n\r') veya my_string.rstrip('\n\t') vb..

Bir yanıt yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to top