Mifuatano katika Python: split, replace, strip, join, slices na f-strings
Mfuatano (aina str) katika Python ni mfuatano usiobadilika wa herufi za Unicode. split() huigawanya kuwa orodha, join() huziunganisha tena, replace() hubadilisha sehemu ya maandishi, na strip() huondoa nafasi pembeni; kila mbinu hurudisha mfuatano mpya. Kuingiza thamani ni rahisi zaidi kwa f-string: f"{name}: {price:.2f}".
Mifuatano ya Python hupatikana katika kila programu: uingizaji wa mtumiaji, majina ya faili, mistari ya CSV, majibu ya API. Aina str huhifadhi maandishi kwa Unicode, kwa hiyo herufi za lugha nyingi na emoji hufanya kazi bila mipangilio ya ziada. Mbinu zinazotumika zaidi ni split, replace, strip na join, na kuonyesha thamani ni rahisi zaidi kwa f-strings. Hebu tuchambue yote kwa mifano.
Mfuatano katika Python unavyofanya kazi
Mfuatano huandikwa kwa nukuu moja au mbili — hakuna tofauti: 'kahawa' na "kahawa" ni sawa. Nukuu tatu huunda mfuatano wa mistari mingi, ambapo mivunjo ya mistari huhifadhiwa kama ilivyo.
name = "Kahawa"
note = """Mstari wa kwanza
Mstari wa pili"""
print(len(name)) # 6 — urefu wa mfuatano kwa herufi
Sifa kuu ya mifuatano ni kutobadilika. Mbinu haibadilishi mfuatano, bali hurudisha mpya. Kwa hiyo s.replace("a", "b") bila mgawo haitafanya chochote — lazima uandike s = s.replace("a", "b"). Hili ndilo kosa la kawaida zaidi kwa wanaoanza.
Herufi maalum, mivunjo ya mistari na mifuatano ghafi
Mivunjo ya mistari huandikwa \n, tabo \t, na mstari wa nyuma \\. Kiambishi r hufanya mfuatano kuwa "ghafi": mistari ya nyuma haichakatwi ndani yake. Hii ni rahisi kwa njia za Windows na usemi wa kawaida (regular expressions).
print("Jumla:\n350 TSh")
path = r"C:\new\table.csv" # \n na \t hazitageuka kuwa herufi maalum
Usemi mrefu unaweza kuvunjwa kwenda mstari unaofuata kwa kuufunga kwenye mabano: Python yenyewe huunganisha mifuatano ya nukuu iliyo karibu ndani ya mabano.
split: kugawanya mfuatano kuwa orodha
Mbinu split() hugawanya mfuatano kwa kitenganishi na kurudisha orodha. Bila hoja hukata kwa alama yoyote ya nafasi na kupuuza nafasi zinazojirudia — ni rahisi kwa kuchambua amri.
"add Kahawa 250".split() # ['add', 'Kahawa', '250']
"2026-10-16".split("-") # ['2026', '10', '16']
"a,b,,c".split(",") # ['a', 'b', '', 'c']
"key=value=x".split("=", 1) # ['key', 'value=x']
Angalia tofauti: kwa kitenganishi wazi, vipande tupu huhifadhiwa. Hoja ya pili maxsplit hupunguza idadi ya kukatwa, na rsplit() hukata kutoka kulia. Ili kugawanya maandishi kuwa mistari, tumia splitlines(): inaelewa \n na \r\n, na haiachi kipengele tupu mwishoni.
text = "kahawa\nteksi\n"
text.split("\n") # ['kahawa', 'teksi', '']
text.splitlines() # ['kahawa', 'teksi']
join: kuunganisha orodha kuwa mfuatano
join() ni operesheni ya kinyume. Huitwa kwenye mfuatano wa kitenganishi, na hoja yake ni orodha ya mifuatano:
items = ["kahawa", "teksi", "chakula"]
print(", ".join(items)) # kahawa, teksi, chakula
print("\n".join(items)) # kila kipengele kwenye mstari wake
Vipengele vyote lazima viwe mifuatano, vinginevyo utapata TypeError: sequence item 0: expected str instance, int found. Namba zibadilishe kwanza: ", ".join(str(x) for x in amounts).
Kuunganisha mifuatano
Mifuatano miwili inaweza kujumlishwa kwa +, na kurudiwa kwa *: "-" * 20. Lakini kuunganisha mamia ya vipande kwa += ndani ya mzunguko ni polepole, kwa sababu kila mara mfuatano mpya unatengenezwa. Kusanya vipande kwenye orodha kisha uviunganishe kwa join() moja. Mfuatano na namba haviwezi kujumlishwa moja kwa moja: "Jumla: " + 5 itasababisha TypeError; tumia str() au f-string.
replace: kubadilisha sehemu ya mfuatano
replace(old, new) hubadilisha mara zote sehemu ndogo inayolingana. Hoja ya tatu inapunguza idadi ya mabadiliko.
price = "1 250,50"
price = price.replace(" ", "").replace(",", ".")
print(float(price)) # 1250.5
"a-b-c".replace("-", "+", 1) # 'a+b-c'
Mbinu hii inajali herufi kubwa/ndogo na inatafuta mlingano kamili. Kwa kubadilisha kwa muundo (kwa mfano "namba zote") unahitaji moduli re na kazi re.sub().
strip, lstrip, rstrip: kupunguza pembe za mfuatano
strip() huondoa nafasi, tabo na mivunjo ya mistari pande zote mbili. lstrip() husafisha upande wa kushoto tu, rstrip() upande wa kulia tu. Hiki ndicho cha kwanza kufanya na uingizaji wa mtumiaji na mistari kutoka faili.
raw = " Kahawa \n"
raw.strip() # 'Kahawa'
raw.rstrip() # ' Kahawa'
"xxKahawaxx".strip("x") # 'Kahawa'
Hoja inaonyesha seti ya herufi, si sehemu ndogo: "abcMaandishicba".strip("abc") itaondoa a, b na c zote kutoka pembeni kwa mpangilio wowote. Ili kukata kiambishi awali au kiambishi tamati hasa, tumia removeprefix() na removesuffix() (tangu Python 3.9).
Mbinu nyingine muhimu za mifuatano
| Mbinu | Inafanya nini | Mfano → matokeo |
|---|---|---|
lower(), upper() | herufi kubwa/ndogo | "Kahawa".lower() → 'kahawa' |
startswith(), endswith() | kuangalia mwanzo na mwisho | "a.csv".endswith(".csv") → True |
find() | nafasi ya sehemu ndogo au -1 | "kahawa".find("w") → 4 |
count() | idadi ya mara zinazojitokeza | "mchana".count("a") → 2 |
isdigit() | ni tarakimu pekee? | "250".isdigit() → True |
zfill() | kujaza sufuri | "7".zfill(3) → '007' |
Kuangalia kama mfuatano una sehemu fulani ni rahisi kwa opereta in: if "kahawa" in text.lower():. Mifuatano hulinganishwa kwa == herufi kwa herufi na kwa kuzingatia herufi kubwa/ndogo; kwa ulinganisho usiozingatia hizo, geuza zote mbili kuwa casefold().
Slices za mifuatano
Mfuatano ni mfuatano wa herufi, kwa hiyo herufi zinaweza kufikiwa kwa faharasa kuanzia sifuri, na faharasa hasi huhesabu kutoka mwisho. Slice s[start:stop:step] hurudisha sehemu ndogo; mpaka wa kulia haujumuishwi.
s = "Python"
s[0] # 'P'
s[-1] # 'n'
s[0:3] # 'Pyt'
s[2:] # 'thon'
s[::2] # 'Pto'
s[::-1] # 'nohtyP' — kugeuza mfuatano
Slice haitoi kosa ikivuka mipaka: s[0:100] itarudisha mfuatano mzima. Lakini s[100] itatoa IndexError. Herufi haiwezi kubadilishwa kwa faharasa (s[0] = "J" — TypeError); badala yake tengeneza mfuatano mpya: "J" + s[1:].
f-strings katika Python
Herufi f mbele ya mfuatano inamaanisha kuwa misemo iliyo ndani ya mabano ya mikunjo itakokotolewa na kuingizwa kwenye maandishi. Hii ndiyo njia kuu ya kupanga mifuatano tangu Python 3.6: ni fupi kuliko format() na ni ya haraka kuliko opereta ya zamani %.
item = "Kahawa"
price = 250
print(f"{item}: {price} TSh") # Kahawa: 250 TSh
print(f"Kwa punguzo: {price * 0.9} TSh") # Kwa punguzo: 225.0 TSh
print(f"{item=}") # item='Kahawa' — rahisi kwa utatuzi
Mpangilio wa namba na upangaji
Baada ya koloni ndani ya mabano kunaandikwa kibainishi cha muundo. Kinaelekeza kuzungusha, vitenganishi vya makundi ya tarakimu, upana na upangaji:
| Andiko | Matokeo | Maana |
|---|---|---|
f"{3.14159:.2f}" | 3.14 | kuzungusha hadi tarakimu 2 |
f"{1250000:,}" | 1,250,000 | kitenganishi cha makundi |
f"{1250000:_}" | 1_250_000 | mstari wa chini badala ya koma |
f"{0.256:.1%}" | 25.6% | asilimia |
f"{'kahawa':<10}|" | kahawa | | upande wa kushoto, upana 10 |
f"{250:>8}" | 250 | upande wa kulia |
f"{7:03d}" | 007 | kujaza sufuri |
Upangaji ni muhimu kwa majedwali kwenye terminal: f"{name:<12}{amount:>10.2f}" itapanga safu kikamilifu. Kumbuka kwamba upangaji unahitajika tu wakati wa kuonyesha. Fedha zihifadhiwe kama senti (int) au kwa Decimal, si kwa float: 0.1 + 0.2 inatoa 0.30000000000000004.
Nukuu na mivunjo ndani ya f-string
Kuanzia Python 3.12 (PEP 701) f-strings zina sarufi rasmi: ndani ya mabano ya mikunjo unaweza kutumia nukuu zile zile za nje, mistari ya nyuma na mivunjo, na kiwango cha kuingizwa hakina kikomo tena. Makosa ndani ya mabano sasa yanaonyesha nafasi kamili. Kwenye matoleo ya zamani andika ndani nukuu za aina nyingine: f"{d['key']}", na mivunjo kupitia kigezo tofauti au chr(10).
Kwa maandishi ya mistari mingi, f-string ya nukuu tatu inafaa: f"""Jumla: {total}\nIdadi: {count}""".
format() na %: njia za zamani
Katika msimbo wa watu wengine utakutana na "{}: {}".format(item, price) na "%s: %d" % (item, price). Vibainishi vya format() ni vile vile vya f-strings. Mbinu ya format() bado ina manufaa pale kiolezo kinapohifadhiwa kando na data, kwa mfano kwenye faili la usanidi.
Kuchambua mfuatano: mfano wa vitendo
Tuunganishe mbinu pamoja. Tuseme kutoka faili linakuja mstari wa aina " 2026-10-16; Kahawa ; 250,50 \n", na tunahitaji tarehe, jina na kiasi kwa senti. Mpangilio wa kawaida: safisha pembe, kata kwa kitenganishi, safisha kila sehemu, kisha badilisha aina.
line = " 2026-10-16; Kahawa ; 250,50 \n"
date, item, raw_amount = [p.strip() for p in line.strip().split(";")]
amount_kop = round(float(raw_amount.replace(",", ".")) * 100)
print(date, item, amount_kop) # 2026-10-16 Kahawa 25050
print(f"{item:<10}{amount_kop / 100:>10.2f}")
Ikiwa sehemu hazitakuwa tatu, kugawanya kutaanguka kwa ValueError: not enough values to unpack au too many values to unpack. Katika msimbo halisi mistari kama hiyo inapaswa kukaguliwa mapema au kosa likamatwe. Kwa faili halisi za CSV zenye nukuu na urukaji wa herufi, tumia moduli ya kawaida csv, si split.
Makosa ya kawaida na mifuatano
- Matokeo ya mbinu hayakuhifadhiwa:
s.strip()bila mgawo haibadilishi chochote. - join kwenye orodha ya namba —
TypeError; kwanzamap(str, ...). - strip na sehemu ndogo: hoja ni seti ya herufi; kwa kiambishi awali tumia
removeprefix(). - Ulinganisho unaozingatia herufi kubwa/ndogo:
"Kahawa" == "kahawa"niFalse. - Mistari ya nyuma katika njia za Windows bila kiambishi
rhugeuka kuwa herufi maalum.
t-strings: kiolezo badala ya maandishi tayari
Python 3.14 imeleta t-strings. Zinaonekana kama f-strings, ila zina kiambishi t, na matokeo yake ni tofauti: si mfuatano tayari, bali kitu cha aina string.templatelib.Template. Ndani yake vipande vya maandishi (.strings) na thamani zilizoingizwa (.values) vinakaa kando kando.
name = "<script>"
tpl = t"Habari, {name}!"
print(tpl.strings) # ('Habari, ', '!')
print(tpl.values) # ('<script>',)
Kwa nini hili lina maana: maktaba hupokea thamani kabla ya kuunganishwa na inaweza kuzichakata — kwa mfano kuficha alama za HTML au kupitisha vigezo kwa usalama kwenye swali la SQL. f-string haitoi nafasi hiyo, kwa sababu imeshaunganisha kila kitu. Kwa uchapishaji wa kawaida bado tumia f-strings.
Hitimisho
Kwa kazi za kila siku na mifuatano katika Python unahitaji seti ndogo: split() na join() hugawanya na kuunganisha maandishi, strip() husafisha uingizaji, replace() hubadilisha vipande, slices hukata sehemu ndogo, na f-strings huonyesha thamani kwa muundo unaotaka. Kumbuka kutobadilika: mbinu hurudisha mfuatano mpya, na lazima uuhifadhi. Mifuatano, namba na f-strings vimefafanuliwa kwa vitendo kwa mfano wa kifuatiliaji cha matumizi katika somo la kozi ya Python.
Maswali ya mara kwa mara
Ninawezaje kujua urefu wa mfuatano katika Python?
Kazi len(s) hurudisha idadi ya herufi. Kwa herufi za Unicode na emoji zinahesabiwa herufi, si baiti; ukubwa kwa baiti unapatikana kwa len(s.encode("utf-8")).
Ninawezaje kugeuza namba kuwa mfuatano na kinyume chake?
str(250) inatoa '250', na int("250") na float("2.5") ni ubadilishaji wa kinyume. Mfuatano usipofanana na namba, int() itasababisha ValueError, kwa hiyo uingizaji unapaswa kukaguliwa.
Kwa nini replace haibadilishi mfuatano wangu?
Mifuatano haibadiliki, replace hurudisha mfuatano mpya. Mpe matokeo mgawo: s = s.replace("a", "b").
Ninawezaje kukagua kama mfuatano ni tupu?
Mfuatano tupu ni sivyo (False), kwa hiyo if not s: inatosha. Ikiwa mfuatano unaweza kuwa na nafasi tu, kagua if not s.strip():.
t-string inatofautianaje na f-string?
f-string hurudisha str iliyokamilika mara moja, wakati t-string (Python 3.14+) ni kitu cha Template chenye vipande vya maandishi na thamani kando. Hii inaruhusu kuficha data salama kwa HTML na SQL.
Mada hii inafundishwa kwa kina pamoja na mazoezi katika kozi “Python 3.15: от новичка до профи”.
Nenda kwenye kozi