# Python-এ স্ট্রিং: split, replace, strip, join, স্লাইস ও f-string

URL: https://skillaria.top/bn/guides/python/strings-python

Python-এর স্ট্রিং (str) হলো অপরিবর্তনীয় Unicode অক্ষরের ক্রম। split() স্ট্রিংকে তালিকায় ভাঙে, join() তালিকাকে আবার জোড়া দেয়, replace() একটি অংশ বদলায়, strip() দুই প্রান্তের ফাঁকা জায়গা সরায়; প্রতিটি মেথড নতুন স্ট্রিং ফেরত দেয়। মান বসানোর সবচেয়ে সুবিধাজনক উপায় f-string: f"{name}: {price:.2f}"।

Python-এর প্রায় প্রতিটি প্রোগ্রামে স্ট্রিং থাকে: ব্যবহারকারীর ইনপুট, ফাইলের নাম, CSV-র লাইন, API-র উত্তর। `str` ধরন টেক্সট রাখে Unicode-এ, তাই বাংলা অক্ষর ও ইমোজি কোনো সেটিংস ছাড়াই কাজ করে। সবচেয়ে বেশি ব্যবহৃত মেথড `split`, `replace`, `strip` ও `join`, আর মান দেখানোর সবচেয়ে সুবিধাজনক উপায় f-string। উদাহরণসহ সবকিছু দেখা যাক।

## Python-এ স্ট্রিং কীভাবে কাজ করে

স্ট্রিং একক বা দ্বৈত উদ্ধৃতিতে লেখা হয় — পার্থক্য নেই: `'coffee'` আর `"coffee"` একই। তিনটি উদ্ধৃতি চিহ্ন দিয়ে বহু-লাইনের স্ট্রিং বানানো যায়, যেখানে লাইন ভাঙা যেমন আছে তেমনই থাকে।

```
name = "Coffee"
note = """প্রথম লাইন
দ্বিতীয় লাইন"""
print(len(name))  # 6 — অক্ষরের দৈর্ঘ্য
```

স্ট্রিংয়ের প্রধান বৈশিষ্ট্য অপরিবর্তনীয়তা। কোনো মেথড স্ট্রিং বদলায় না, বরং নতুন একটি ফেরত দেয়। তাই `s.replace("a", "b")` কোনো কিছুকে নির্ধারণ না করলে কিছুই হয় না — লিখতে হবে `s = s.replace("a", "b")`। এটি নতুনদের সবচেয়ে সাধারণ ভুল।

### বিশেষ অক্ষর, লাইন ভাঙা ও raw স্ট্রিং

লাইন ভাঙা লেখা হয় `\n`, ট্যাব `\t`, ব্যাকস্ল্যাশ `\\`। `r` উপসর্গ স্ট্রিংকে «raw» করে: এতে ব্যাকস্ল্যাশগুলো বিশেষ অর্থে ব্যবহৃত হয় না। Windows-এর পথ ও regular expression-এর জন্য এটি কাজে লাগে।

```
print("মোট:\n30 ৳")
path = r"C:\new\table.csv"   # \n ও \t বিশেষ অক্ষরে রূপান্তরিত হবে না
```

দীর্ঘ এক্সপ্রেশন কোডে পরের লাইনে নিতে বন্ধনীতে মুড়ুন: বন্ধনীর ভেতরের পাশাপাশি স্ট্রিং-লিটারালগুলো Python নিজেই জুড়ে দেয়।

## split: স্ট্রিংকে তালিকায় ভাঙা

`split()` মেথড একটি বিভাজক দিয়ে স্ট্রিং ভেঙে তালিকা ফেরত দেয়। কোনো আর্গুমেন্ট না দিলে এটি যেকোনো ফাঁকা অক্ষরে ভাঙে এবং একাধিক ফাঁকা জায়গা উপেক্ষা করে — কমান্ড বিশ্লেষণে এটি সুবিধাজনক।

```
"add  Coffee 250".split()        # ['add', 'Coffee', '250']
"2026-10-16".split("-")          # ['2026', '10', '16']
"a,b,,c".split(",")              # ['a', 'b', '', 'c']
"key=value=x".split("=", 1)      # ['key', 'value=x']
```

পার্থক্যটি লক্ষ করুন: স্পষ্ট বিভাজক দিলে খালি অংশগুলো থেকে যায়। দ্বিতীয় আর্গুমেন্ট `maxsplit` কাটার সংখ্যা সীমিত করে, আর `rsplit()` ডান দিক থেকে কাটে। টেক্সটকে লাইনে ভাঙতে `splitlines()` ব্যবহার করুন: এটি `\n` ও `\r\n` দুটোই বোঝে এবং শেষে একটি খালি উপাদান রাখে না।

```
text = "coffee\ntaxi\n"
text.split("\n")     # ['coffee', 'taxi', '']
text.splitlines()    # ['coffee', 'taxi']
```

## join: তালিকাকে স্ট্রিংয়ে জোড়া দেওয়া

`join()` উল্টো কাজ করে। এটি ডাকা হয় বিভাজক-স্ট্রিংয়ের উপর, আর আর্গুমেন্ট হিসেবে নেয় স্ট্রিংয়ের তালিকা:

```
items = ["coffee", "taxi", "lunch"]
print(", ".join(items))   # coffee, taxi, lunch
print("\n".join(items))   # প্রতিটি আইটেম নতুন লাইনে
```

সব উপাদান অবশ্যই স্ট্রিং হতে হবে, নইলে পাবেন `TypeError: sequence item 0: expected str instance, int found`। সংখ্যা আগে রূপান্তর করুন: `", ".join(str(x) for x in amounts)`।

### স্ট্রিং জোড়া দেওয়া ও যুক্ত করা

দুটি স্ট্রিং `+` দিয়ে জোড়া দেওয়া যায়, আর `*` দিয়ে পুনরাবৃত্তি করা যায়: `"-" * 20`। কিন্তু লুপে শত শত অংশ `+=` দিয়ে জুড়লে ধীর হয়, কারণ প্রতিবার নতুন স্ট্রিং বানানো হয়। অংশগুলো তালিকায় রেখে একটি `join()`-এ জুড়ুন। স্ট্রিংয়ের সঙ্গে সংখ্যা সরাসরি যোগ করা যায় না: `"মোট: " + 5` দেবে `TypeError`, এখানে দরকার `str()` বা f-string।

## replace: অংশ বদলানো

`replace(old, new)` সব মিলে যাওয়া অংশ বদলায়। তৃতীয় আর্গুমেন্ট বদলের সংখ্যা সীমিত করে।

```
price = "1,250.50"
price = price.replace(",", "")
print(float(price))                  # 1250.5

"a-b-c".replace("-", "+", 1)         # 'a+b-c'
```

মেথডটি বড়-ছোট হাতের অক্ষরের পার্থক্য মানে এবং হুবহু মিল খোঁজে। প্যাটার্ন দিয়ে বদল (যেমন «সব সংখ্যা») দরকার হলে `re` মডিউল ও `re.sub()` লাগে।

## strip, lstrip, rstrip: স্ট্রিং ছাঁটা

`strip()` দুই প্রান্ত থেকে ফাঁকা জায়গা, ট্যাব ও লাইন ভাঙা সরায়। `lstrip()` শুধু বাঁ দিক, `rstrip()` শুধু ডান দিক পরিষ্কার করে। ব্যবহারকারীর ইনপুট বা ফাইলের লাইন নিয়ে কাজ শুরুর আগে এটিই প্রথম করণীয়।

```
raw = "  Coffee \n"
raw.strip()       # 'Coffee'
raw.rstrip()      # '  Coffee'
"xxCoffeexx".strip("x")   # 'Coffee'
```

আর্গুমেন্টটি অক্ষরের একটি সেট, পুরো উপস্ট্রিং নয়: `"abcTextcba".strip("abc")` প্রান্ত থেকে যেকোনো ক্রমে সব a, b ও c সরাবে। কোনো নির্দিষ্ট উপসর্গ বা প্রত্যয় কাটতে `removeprefix()` ও `removesuffix()` ব্যবহার করুন (Python 3.9 থেকে)।

## স্ট্রিংয়ের অন্যান্য কাজের মেথড

| মেথড | কাজ | উদাহরণ → ফল |
| --- | --- | --- |

| `lower()`, `upper()` | অক্ষরের কেস | `"Coffee".lower()` → `'coffee'` |

| `startswith()`, `endswith()` | শুরু ও শেষ যাচাই | `"a.csv".endswith(".csv")` → `True` |

| `find()` | উপস্ট্রিংয়ের অবস্থান বা -1 | `"coffee".find("f")` → `2` |

| `count()` | কতবার আছে | `"banana".count("a")` → `3` |

| `isdigit()` | শুধু সংখ্যা? | `"250".isdigit()` → `True` |

| `zfill()` | শূন্য দিয়ে ভরাট | `"7".zfill(3)` → `'007'` |

স্ট্রিংয়ে কোনো অংশ আছে কিনা সবচেয়ে সহজে দেখা যায় `in` অপারেটর দিয়ে: `if "coffee" in text.lower():`। স্ট্রিং `==` দিয়ে অক্ষরে অক্ষরে এবং কেস মিলিয়ে তুলনা হয়; কেস না মিলিয়ে তুলনার জন্য দুটিকেই `casefold()`-এ আনুন।

## স্ট্রিংয়ের স্লাইস

স্ট্রিং একটি ক্রম, তাই অক্ষরগুলো শূন্য থেকে গোনা সূচকে পাওয়া যায়, আর ঋণাত্মক সূচক শেষ থেকে গোনে। স্লাইস `s[start:stop:step]` একটি উপস্ট্রিং ফেরত দেয়; ডান সীমা অন্তর্ভুক্ত নয়।

```
s = "Python"
s[0]      # 'P'
s[-1]     # 'n'
s[0:3]    # 'Pyt'
s[2:]     # 'thon'
s[::2]    # 'Pto'
s[::-1]   # 'nohtyP' — স্ট্রিং উল্টে দেওয়া
```

সীমার বাইরে গেলে স্লাইস কখনো ত্রুটি দেয় না: `s[0:100]` পুরো স্ট্রিং ফেরত দেবে। কিন্তু `s[100]` দেবে `IndexError`। সূচক ধরে একটি অক্ষর বদলানো যায় না (`s[0] = "J"` — `TypeError`), বরং নতুন স্ট্রিং বানাতে হয়: `"J" + s[1:]`।

## Python-এর f-string

স্ট্রিংয়ের আগে `f` অক্ষরের অর্থ: ঘেরা বন্ধনীর ভেতরের এক্সপ্রেশনগুলো হিসাব হয়ে টেক্সটে বসবে। Python 3.6 থেকে এটিই স্ট্রিং ফরম্যাটের প্রধান উপায়: `format()`-এর চেয়ে ছোট এবং পুরনো `%` অপারেটরের চেয়ে দ্রুত।

```
item = "Coffee"
price = 250
print(f"{item}: {price} ৳")              # Coffee: 250 ৳
print(f"ছাড়ের পর: {price * 0.9} ৳")     # ছাড়ের পর: 225.0 ৳
print(f"{item=}")                         # item='Coffee' — ডিবাগের জন্য সুবিধাজনক
```

### সংখ্যার ফরম্যাট ও প্রান্তিককরণ

বন্ধনীর ভেতরে কোলনের পর লেখা হয় ফরম্যাট-স্পেসিফায়ার। এতে নির্ধারণ হয় দশমিক গোলাকরণ, সংখ্যার বিভাজক, প্রস্থ ও প্রান্তিককরণ:

| লেখা | ফল | অর্থ |
| --- | --- | --- |

| `f"{3.14159:.2f}"` | `3.14` | ২ ঘর পর্যন্ত গোল করা |

| `f"{1250000:,}"` | `1,250,000` | অঙ্কের বিভাজক |

| `f"{1250000:_}"` | `1_250_000` | কমার বদলে আন্ডারস্কোর |

| `f"{0.256:.1%}"` | `25.6%` | শতাংশ |

| `f"{'coffee':<10}|"` | `coffee |` | বাঁ দিকে, প্রস্থ ১০ |

| `f"{250:>8}"` | ` 250` | ডান দিকে |

| `f"{7:03d}"` | `007` | শূন্য দিয়ে ভরাট |

টার্মিনালের টেবিলের জন্য প্রান্তিককরণ কাজে লাগে: `f"{name:<12}{amount:>10.2f}"` কলামগুলো ঠিকঠাক সাজিয়ে দেয়। মনে রাখবেন, ফরম্যাট শুধু প্রদর্শনের সময় দরকার। টাকা রাখুন পয়সায় (`int`) বা `Decimal`-এ, `float`-এ নয়: `0.1 + 0.2` দেয় `0.30000000000000004`।

### f-string-এর ভেতরে উদ্ধৃতি ও লাইন ভাঙা

Python 3.12 থেকে (PEP 701) f-string-এর একটি আনুষ্ঠানিক ব্যাকরণ এসেছে: বন্ধনীর ভেতরে বাইরের মতোই উদ্ধৃতি চিহ্ন, ব্যাকস্ল্যাশ ও লাইন ভাঙা ব্যবহার করা যায়, এবং নেস্টিংয়ের সীমা নেই। বন্ধনীর ভেতরের ত্রুটি এখন সঠিক অবস্থান দেখায়। পুরনো সংস্করণে ভেতরে ভিন্ন ধরনের উদ্ধৃতি লিখুন: `f"{d['key']}"`, আর লাইন ভাঙার জন্য আলাদা ভেরিয়েবল বা `chr(10)` ব্যবহার করুন।

বহু-লাইনের টেক্সটের জন্য তিন উদ্ধৃতির f-string উপযোগী: `f"""মোট: {total}\nসংখ্যা: {count}"""`।

### format() ও %: পুরনো পদ্ধতি

পুরনো কোডে দেখা যাবে `"{}: {}".format(item, price)` ও `"%s: %d" % (item, price)`। `format()`-এর স্পেসিফায়ার f-string-এর মতোই। টেমপ্লেট যখন ডেটা থেকে আলাদা থাকে, যেমন কনফিগে, তখন `format()` এখনো কাজের।

## স্ট্রিং বিশ্লেষণ: ব্যবহারিক উদাহরণ

মেথডগুলো একসঙ্গে ব্যবহার করা যাক। ধরুন ফাইল থেকে `"  2026-10-16; Coffee ; 250.50 \n"` ধরনের লাইন আসে, আর আমাদের তারিখ, নাম ও পয়সায় পরিমাণ লাগবে। ধাপগুলো সাধারণ: প্রান্ত পরিষ্কার, বিভাজকে কাটা, প্রতিটি অংশ ছাঁটা, ধরন রূপান্তর।

```
line = "  2026-10-16; Coffee ; 250.50 \n"

date, item, raw_amount = [p.strip() for p in line.strip().split(";")]
amount_kop = round(float(raw_amount) * 100)

print(date, item, amount_kop)            # 2026-10-16 Coffee 25050
print(f"{item:10.2f}")
```

অংশ তিনটি না হলে আনপ্যাক `ValueError: not enough values to unpack` বা `too many values to unpack` দিয়ে থেমে যাবে। প্রকৃত কোডে এমন লাইন আগে থেকে যাচাই করুন, নইলে ব্যতিক্রম ধরুন। উদ্ধৃতি ও escape-সহ আসল CSV ফাইলের জন্য `split` নয়, স্ট্যান্ডার্ড `csv` মডিউল নিন।

### স্ট্রিংয়ের সাধারণ ভুল

- **মেথডের ফল সংরক্ষণ না করা**: শুধু `s.strip()` লিখলে কিছু বদলায় না।
- **সংখ্যার তালিকায় join** — `TypeError`; আগে `map(str, ...)`।
- **strip-এ উপস্ট্রিং দেওয়া**: আর্গুমেন্ট অক্ষরের সেট; উপসর্গের জন্য `removeprefix()`।
- **কেস মিলিয়ে তুলনা**: `"Coffee" == "coffee"` — `False`।
- **Windows-এর পথে ব্যাকস্ল্যাশ** `r` উপসর্গ ছাড়া বিশেষ অক্ষরে রূপান্তরিত হয়।

## t-string: তৈরি লেখার বদলে টেমপ্লেট

Python 3.14-এ এসেছে t-string। দেখতে f-string-এর মতো, শুধু উপসর্গ `t`, তবে ফল ভিন্ন: তৈরি স্ট্রিং নয়, বরং `string.templatelib.Template` অবজেক্ট। এতে টেক্সটের অংশগুলো (`.strings`) এবং বসানো মানগুলো (`.values`) আলাদা থাকে।

```
name = ""
tpl = t"Hello, {name}!"
print(tpl.strings)   # ('Hello, ', '!')
print(tpl.values)    # ('',)
```

এটি কেন দরকার: লাইব্রেরি জোড়া লাগার আগেই মানগুলো পায় এবং প্রক্রিয়া করতে পারে — যেমন HTML-এ কৌণিক বন্ধনী escape করা বা SQL কোয়েরিতে সঠিকভাবে প্যারামিটার পাঠানো। f-string-এ সে সুযোগ নেই, সেখানে সবকিছু আগেই জোড়া লেগে যায়। সাধারণ আউটপুটের জন্য এখনো f-string-ই ব্যবহার করুন।

## সারসংক্ষেপ

দৈনন্দিন কাজে Python-এর স্ট্রিংয়ের জন্য ছোট একটি মেথড-সেটই যথেষ্ট: `split()` ও `join()` টেক্সট ভাঙে ও জোড়ে, `strip()` ইনপুট পরিষ্কার করে, `replace()` অংশ বদলায়, স্লাইস উপস্ট্রিং কাটে, আর f-string নির্দিষ্ট ফরম্যাটে মান দেখায়। অপরিবর্তনীয়তা মনে রাখুন: মেথড নতুন স্ট্রিং ফেরত দেয়, সেটি সংরক্ষণ করতে হয়। স্ট্রিং, সংখ্যা ও f-string খরচের ট্র্যাকারের উদাহরণে কোর্সের একটি লেকচারে বাস্তবে শেখানো হয়েছে।

## FAQ

**Python-এ স্ট্রিংয়ের দৈর্ঘ্য কীভাবে জানব?**

len(s) ফাংশন অক্ষরের সংখ্যা দেয়। বাংলা ও ইমোজিও Unicode অক্ষর হিসেবে গোনা হয়, বাইট হিসেবে নয়; বাইটের আকার পেতে len(s.encode("utf-8")) লিখুন।

**সংখ্যাকে স্ট্রিং এবং স্ট্রিংকে সংখ্যায় কীভাবে বদলাব?**

str(250) দেয় '250', আর int("250") ও float("2.5") বিপরীত রূপান্তর করে। স্ট্রিং সংখ্যার মতো না হলে int() ValueError দেয়, তাই ইনপুট যাচাই করা ভালো।

**replace আমার স্ট্রিং বদলায় না কেন?**

স্ট্রিং অপরিবর্তনীয়, replace নতুন স্ট্রিং ফেরত দেয়। ফলটি নির্ধারণ করুন: s = s.replace("a", "b")।

**স্ট্রিং খালি কিনা কীভাবে যাচাই করব?**

খালি স্ট্রিং মিথ্যা হিসেবে গণ্য হয়, তাই if not s: যথেষ্ট। স্ট্রিংয়ে শুধু ফাঁকা জায়গা থাকতে পারলে if not s.strip(): লিখুন।

**t-string কীভাবে f-string থেকে আলাদা?**

f-string সরাসরি তৈরি str ফেরত দেয়, আর t-string (Python 3.14+) হলো Template অবজেক্ট, যেখানে টেক্সটের অংশ ও মানগুলো আলাদা থাকে। এতে HTML ও SQL-এর জন্য ডেটা নিরাপদে escape করা যায়।


---
Source: Skillaria.Top (https://skillaria.top)
