2.5. Dize metotları ve biçimlendirme

Dizeler, inceleme ve yeniden şekillendirme için yerleşik bir metot araç kutusuyla gelir. Dizeler değişmez olduğundan, her metot yeni bir dize döndürür – orijinal değişmeden kalır.

2.5.1. Dizeleri inceleme

  • str.startswith() / str.endswith() – önek veya sonek testi; bool döndürür.

  • str.find() – bir alt dizenin ilk geçtiği konum veya yoksa -1. str.index() aynı şeyi yapar ancak yokluk durumunda ValueError fırlatır.

  • str.count() – üst üste binmeyen geçişlerin sayısı.

  • in anahtar sözcüğü – alt dize dizenin herhangi bir yerindeyse "MV" in name True döndürür.

>>> name = "OpenMV Cam"
>>> name.startswith("Open")
True
>>> name.find("MV")
4
>>> name.count("m")
1
>>> "Cam" in name
True

2.5.2. Temizleme ve büyük/küçük harf

  • str.strip() – baştaki ve sondaki boşlukları kaldırır. Özel bir kümeyi kırpmak için bir karakter dizesi geçirin (s.strip("/")).

  • str.lower() / str.upper() – büyük/küçük harf dönüşümü.

  • str.replace() – alt dize değiştirme.

>>> "  hello  ".strip()
'hello'
>>> "abc-123".replace("-", "_")
'abc_123'
>>> "OpenMV".lower()
'openmv'

2.5.3. Bölme ve birleştirme

  • str.split() – bir ayırıcının her geçtiği yerde bir dizeyi bir listeye böler (varsayılan: herhangi bir boşluk dizisi).

  • str.join() – tersi: bir dizeler dizisini, alıcıyı ayırıcı olarak kullanarak birbirine yapıştırır. Bu, parçalardan uzun bir dize oluşturmanın verimli yoludur.

>>> "1,2,3".split(",")
['1', '2', '3']
>>> "hello world".split()
['hello', 'world']
>>> ", ".join(["a", "b", "c"])
'a, b, c'

2.5.4. f-dizeleri

Değerleri bir dizeye eklemenin en basit yolu f-dizesidirf ile öneklenmiş bir dize değişmezi. {} içindeki herhangi bir ifade değerlendirilir ve eklenir:

>>> name = "OpenMV"
>>> count = 42
>>> f"{name} saw {count} blobs"
'OpenMV saw 42 blobs'

Süslü parantezlerin içindeki iki nokta üst üste, değerin nasıl gösterileceğini denetleyen bir biçim belirtimi başlatır:

  • {x:.2f} – ondalık noktadan sonra 2 basamaklı kayan noktalı sayı.

  • {x:>10} – 10 karakterlik bir alanda sağa hizala.

  • {x:<10} – sola hizala.

  • {x:0>4} – 4 genişliğine ulaşmak için baştan sıfırlarla doldur.

  • {x:#x}0x önekli onaltılık.

  • {x:b} – ikilik gösterim.

>>> f"pi is roughly {3.14159:.3f}"
'pi is roughly 3.142'
>>> f"reg = {0xAB:#x}"
'reg = 0xab'
>>> for i in range(3):
...     print(f"line {i:0>3}")
line 000
line 001
line 002

İfade adından sonra tek bir = hem adı hem de değeri yazdırır – hızlı hata ayıklama çıktıları için kullanışlıdır:

>>> v = 3.14
>>> print(f"{v=}")
v=3.14

2.5.4.1. Tamsayı taban dönüşümleri

Üç yerleşik fonksiyon :b / :o / :x biçim belirtimleriyle aynı işi yapar ancak dönüştürülen dizeyi doğrudan döndürür:

  • bin() – taban 2, "0b" önekiyle.

  • oct() – taban 8, "0o" önekiyle.

  • hex() – taban 16, "0x" önekiyle.

>>> hex(255)
'0xff'
>>> bin(10)
'0b1010'
>>> oct(8)
'0o10'

Ters yön – bir taban-N dizesini tekrar bir tamsayıya dönüştürmek – açık bir tabanla int kurucusunu kullanır:

>>> int("ff", 16)
255
>>> int("0b1010", 2)         # the "0b" prefix is allowed
10

Bir tamsayı için ham dizeyi istediğinizde (bir günlük satırı, bir yapılandırma dosyası, bir yazmaç dökümü için) bunlara başvurun. Doldurma, genişlik istediğinizde veya değeri aynı f-dizesinde başka metinle karıştırmak istediğinizde biçim belirtimine başvurun.

2.5.5. Eski biçimlendirme stilleri

f-dizeleri önerilen stildir, ancak iki eski yaklaşım hâlâ çalışır ve mevcut kodda karşımıza çıkar:

str.format() – bir şablon dizesinde .format() metoduna geçirilen konumsal veya anahtar sözcük argümanlarıyla süslü parantezler:

>>> "Hello, {}".format(name)
'Hello, OpenMV'
>>> "{0} + {0} = {1}".format(2, 4)
'2 + 2 = 4'
>>> "{name}: {value}".format(name="frames", value=42)
'frames: 42'

Biçim belirtimleri ({:.2f}, {:>10}, …) f-dizelerindeki gibi aynı çalışır; tek fark değerin nerede sağlandığıdır.

% biçimlendirmesi (printf stili) – tek bir % operatörü, biçim koduna bir değer olacak şekilde değerleri biçim kodlarına yerleştirir. Birden fazla değeri bir demet olarak geçirin:

>>> "Hello, %s" % name
'Hello, OpenMV'
>>> "%d + %d = %d" % (2, 2, 4)
'2 + 2 = 4'
>>> "%.2f" % 3.14159
'3.14'

En yaygın tür kodları %s (dize), %d (tamsayı), %f (kayan noktalı) ve %x (onaltılık) kodlarıdır.

Her % kodu, % ile tür harfi arasında değiştiriciler taşıyabilir. Tam biçim %[flags][width][.precision]type şeklindedir:

  • width – alanın alması gereken minimum karakter sayısı. Daha kısa değerler boşluklarla doldurulur; daha uzun değerler taşar. %10d 10 karakter ayırır ve sayıyı sağa hizalar.

  • precision – anlamı türe bağlıdır. Kayan noktalı sayılar için ondalık noktadan sonraki basamak sayısıdır. %.2f iki ondalık basamak verir. Dizeler için alınacak maksimum karakter sayısıdır (%.5s beşe kırpar).

  • Sola hizalama- bayrağı alanı sola koyar. %-10d rakamları sondaki boşluklarla sol tarafa koyar.

  • Sıfırla doldurma0 bayrağı boşluklar yerine baştan sıfırlarla doldurur (sayısal türler için). %05d beş basamağa sıfırla doldurur.

  • İşaret+ bayrağı sayılarda her zaman işareti gösterir, pozitifler için bir + dahil.

  • Alternatif biçim# bayrağı. %x için bu, çıktıyı 0x ile önekler; %o için 0o ile önekler.

Bayraklar, genişlik ve hassasiyet birleştirilebilir:

>>> "%10d" % 42
'        42'                 # width 10, space-padded, right-aligned
>>> "%-10d|" % 42
'42        |'                # width 10, left-aligned
>>> "%05d" % 42
'00042'                      # width 5, zero-padded
>>> "%8.2f" % 3.14159
'    3.14'                   # width 8, 2 decimal places
>>> "%08.2f" % 3.14159
'00003.14'                   # width 8, zero-padded
>>> "%+d" % 42
'+42'                        # explicit sign
>>> "%#06x" % 0xAB
'0x00ab'                     # 0x prefix, zero-pad to 6 chars total

Her iki eski stil de f-dizelerinden okunması daha yavaş ve hataya daha açıktır – yeni kodda f-dizelerine başvurun ve mevcut kodu okurken eski biçimleri tanıyın.