متدهای رشته در پایتون؛ upper، split، replace و متدهای کاربردی

🗓 آخرین بهروزرسانی:
در درس قبلی با رشتهها در پایتون، ایندکس و برش آشنا شدیم. اما قدرت واقعی رشتهها در متدهای آماده آنهاست. متدها توابعی هستند که روی خود رشته صدا زده میشوند و کارهایی مثل تبدیل حروف به بزرگ یا کوچک، حذف فاصلههای اضافه، جایگزینی کلمات، جدا کردن متن به چند بخش و جستجو را تنها با یک خط کد انجام میدهند.
این درس بخشی از دوره رایگان آموزش پایتون از صفر است. در ادامه پرکاربردترین متدهای رشته در پایتون را دستهبندیشده، با مثال اجرایی و خروجی، یاد میگیریم و در پایان یک تمرین واقعی پردازش متن انجام میدهیم.
متد رشته چیست و چطور صدا زده میشود؟
متد با نقطه بعد از رشته یا متغیر رشتهای نوشته میشود: text.method(). چون رشتهها تغییرناپذیرند، هیچ متدی رشته اصلی را تغییر نمیدهد؛ بلکه یک رشته جدید برمیگرداند. پس اگر نتیجه را لازم دارید، باید آن را در متغیری ذخیره کنید:
name = "python"
upper_name = name.upper()
print(name) # python
print(upper_name) # PYTHONبرای دیدن فهرست کامل متدهای رشته میتوانید در محیط تعاملی پایتون دستور dir(str) یا help(str) را اجرا کنید.
۱. تغییر حروف بزرگ و کوچک
این متدها برای حروف انگلیسی کاربرد دارند و روی متن فارسی تأثیری ندارند:
text = "hello PYTHON world"
print(text.upper()) # HELLO PYTHON WORLD
print(text.lower()) # hello python world
print(text.title()) # Hello Python World
print(text.capitalize()) # Hello python world
print(text.swapcase()) # HELLO python WORLDupper(): همه حروف را بزرگ میکند.lower(): همه حروف را کوچک میکند؛ برای مقایسه ورودی کاربر بسیار مفید است.title(): حرف اول هر کلمه را بزرگ میکند.capitalize(): فقط حرف اول کل رشته را بزرگ میکند.swapcase(): بزرگ و کوچک را جابهجا میکند.
یک کاربرد رایج: کاربر ممکن است «Yes»، «YES» یا «yes» تایپ کند. با lower() همه را یکسان میکنیم:
answer = "YES"
if answer.lower() == "yes":
print("تأیید شد")۲. حذف فاصلههای اضافه با strip
ورودی کاربر معمولاً فاصله اضافه در ابتدا یا انتها دارد. متد strip() این فاصلهها را حذف میکند:
raw = " ali@example.com "
print("[" + raw.strip() + "]") # [ali@example.com]
print("[" + raw.lstrip() + "]") # [ali@example.com ]
print("[" + raw.rstrip() + "]") # [ ali@example.com]
print("---سلام---".strip("-")) # سلامهمیشه بعد از دریافت ورودی با input بهتر است strip() را اجرا کنید تا خطاهای ناشی از فاصله پیش نیاید.
۳. جستجو در رشته: find، index، count، startswith و endswith
text = "python is easy and python is fun"
print(text.find("python")) # 0
print(text.find("python", 1)) # 19
print(text.find("java")) # -1
print(text.count("python")) # 2
print(text.startswith("py")) # True
print(text.endswith("fun")) # Truefind(): ایندکس اولین رخداد را برمیگرداند و اگر پیدا نشود-1میدهد.index(): مثلfind()است ولی اگر پیدا نشود خطایValueErrorمیدهد.count(): تعداد تکرار یک عبارت را میشمارد.startswith()وendswith(): شروع یا پایان رشته را بررسی میکنند؛ مثلاً برای تشخیص پسوند فایل.
filename = "report.pdf"
if filename.endswith(".pdf"):
print("این یک فایل PDF است")این روش در پروژه مرتبسازی خودکار فایلها با پایتون هم استفاده شده است.
۴. جایگزینی متن با replace
متد replace(old, new) همه رخدادهای یک عبارت را با عبارت دیگری جایگزین میکند. پارامتر سوم اختیاری تعداد جایگزینی را محدود میکند:
text = "I like Java. Java is good."
print(text.replace("Java", "Python"))
# I like Python. Python is good.
print(text.replace("Java", "Python", 1))
# I like Python. Java is good.
phone = "0912-123-4567"
print(phone.replace("-", "")) # 09121234567۵. تقسیم و اتصال: split و join
متد split() رشته را بر اساس یک جداکننده به لیست تبدیل میکند. اگر جداکننده ندهید، بر اساس فاصله جدا میکند:
sentence = "python is a great language"
words = sentence.split()
print(words) # ['python', 'is', 'a', 'great', 'language']
print(len(words)) # 5
csv_line = "Ali,25,Tehran"
parts = csv_line.split(",")
print(parts) # ['Ali', '25', 'Tehran']متد join() برعکس عمل میکند و عناصر یک لیست از رشتهها را با یک جداکننده به هم میچسباند:
words = ["Dev", "Source", "Python"]
print(" ".join(words)) # Dev Source Python
print("-".join(words)) # Dev-Source-Python
print(", ".join(["سیب", "موز", "پرتقال"]))ترکیب split() و join() یک ترفند حرفهای برای حذف فاصلههای تکراری وسط متن است:
messy = "این متن فاصلههای زیادی دارد"
clean = " ".join(messy.split())
print(clean) # این متن فاصلههای زیادی دارد۶. بررسی نوع محتوا: isdigit، isalpha و isalnum
این متدها True یا False برمیگردانند و برای اعتبارسنجی ورودی کاربر عالی هستند:
print("12345".isdigit()) # True
print("12a45".isdigit()) # False
print("Python".isalpha()) # True
print("Py3".isalnum()) # True
print(" ".isspace()) # True
print("HELLO".isupper()) # Trueمثال کاربردی: قبل از تبدیل ورودی به عدد، بررسی میکنیم که واقعاً عدد باشد تا برنامه با خطا متوقف نشود:
age_text = "27"
if age_text.isdigit():
age = int(age_text)
print("سال بعد", age + 1, "ساله میشوید")
else:
print("لطفاً فقط عدد وارد کنید")۷. تراز کردن متن: center، ljust، rjust و zfill
print("Menu".center(20, "*")) # ********Menu********
print("Name".ljust(10) + "|") # Name |
print("42".rjust(6, ".")) # ....42
print("7".zfill(3)) # 007این متدها برای ساخت خروجیهای مرتب در برنامههای خط فرمان، مثل منوها و جدولها، کاربرد دارند. zfill() مخصوصاً برای ساخت شمارههای سفارش یا کد با طول ثابت مفید است.
زنجیره کردن متدها
چون هر متد یک رشته جدید برمیگرداند، میتوانیم متدها را پشت سر هم صدا بزنیم:
raw_email = " Ali.Ahmadi@Gmail.COM "
email = raw_email.strip().lower()
print(email) # ali.ahmadi@gmail.comتمرین کاربردی: تحلیل یک متن
در این تمرین تعداد کلمات، پرتکرارترین کلمه و نسخه تمیز یک متن را به دست میآوریم. در این تمرین از دیکشنری برای شمارش کلمات استفاده شده است:
text = " Python is easy. Python is powerful. I love Python! "
clean = text.strip().lower()
for sign in ".,!?":
clean = clean.replace(sign, "")
words = clean.split()
counts = {}
for w in words:
counts[w] = counts.get(w, 0) + 1
most_common = max(counts, key=counts.get)
print("تعداد کلمات:", len(words)) # 9
print("پرتکرارترین کلمه:", most_common) # python
print("تعداد تکرار:", counts[most_common]) # 3جدول خلاصه متدهای پرکاربرد رشته
upper()/lower()/title(): تغییر حروفstrip()/lstrip()/rstrip(): حذف فاصله یا کاراکتر از دو طرفfind()/index()/count(): جستجو و شمارشstartswith()/endswith(): بررسی شروع و پایانreplace(): جایگزینیsplit()/join(): تبدیل رشته به لیست و برعکسisdigit()/isalpha()/isalnum(): اعتبارسنجیcenter()/ljust()/rjust()/zfill(): تراز
خطاهای رایج
- انتظار تغییر رشته اصلی:
name.upper()بهتنهایی متغیرnameرا عوض نمیکند؛ باید بنویسیدname = name.upper(). - فراموش کردن پرانتز:
text.upperبدون پرانتز خود متد را برمیگرداند، نه نتیجه را. - استفاده از join روی لیست عددی:
"-".join([1, 2])خطا میدهد؛ ابتدا عناصر را به رشته تبدیل کنید. - اشتباه گرفتن find و index: اگر احتمال نبودن عبارت وجود دارد، از
find()استفاده کنید.
📌 همچنین بخوانید: بازار کار پایتون در ایران، نصب و تنظیم پایتون در VS Code و برنامهنویسی پایتون با گوشی
سؤالات متداول
چرا متد upper روی متن فارسی کار نمیکند؟
حروف فارسی بزرگ و کوچک ندارند؛ بنابراین متدهای تغییر حروف روی آنها اثری ندارند ولی خطا هم نمیدهند.
تفاوت split() بدون آرگومان و split(” “) چیست؟
split() بدون آرگومان همه فاصلههای پشت سر هم، تب و خط جدید را یک جداکننده حساب میکند و رشته خالی تولید نمیکند؛ اما split(" ") فقط تکفاصله را جداکننده میداند و ممکن است عنصر خالی بسازد.
چطور همه متدهای رشته را ببینم؟
دستور dir(str) فهرست همه متدها و help(str.replace) توضیح یک متد خاص را نمایش میدهد.
جمعبندی
در این آموزش پرکاربردترین متدهای رشته در پایتون را یاد گرفتیم: تغییر حروف، حذف فاصله، جستجو، جایگزینی، تقسیم و اتصال، اعتبارسنجی و تراز. همچنین دیدیم متدها رشته اصلی را تغییر نمیدهند و میتوان آنها را زنجیرهای صدا زد. با این ابزارها میتوانید ورودی کاربر را تمیز کنید، متن را تحلیل کنید و خروجیهای مرتب بسازید.
درس قبلی: رشتهها در پایتون؛ تعریف، ایندکس و برش
درس بعدی: قالببندی رشته با f-string در پایتون
بازگشت به فهرست کامل دوره آموزش پایتون از صفر
برای ذخیره پیشرفت در همه دستگاهها و دریافت گواهی پایان مسیر، رایگان ثبتنام کن یا وارد شو.