نوع داده رشته در پایتون
نوع داده رشته در پایتون
نوع داده رشته (String) در پایتون
رشتهها (str) یکی از پرکاربردترین انواع داده در پایتون هستند که برای ذخیره و پردازش متن، پیامها، مسیر فایلها و کاراکترها استفاده میشوند. در این مقاله به معرفی ماهیت رشته، مفهوم جداییپذیری (Iterability)، پیمایش با حلقه for، توابع عمومی و متدهای کلیدی رشته میپردازیم.
ویژگی های رشته
رشته در پایتون دنبالهای متوالی از کاراکترهاست. رشتهها ویژگیهای مهمی دارند:
- تغییرناپذیری (Immutable): کاراکترهای رشته پس از تعریف مستقیماً قابل ویرایش نیستند.
- اندیسپذیر بودن (Indexed): دسترسی به هر کاراکتر از طریق موقعیت آن امکانپذیر است.
- جداییپذیری و تکرارپذیری (Iterable): رشته یک ساختار قابلتجزیه است؛ یعنی پایتون کاراکترهای آن را مجزا میشناسد و میتوان آن را پیمایش کرد.
پیمایش رشته با حلقه for
به دلیل جداییپذیری رشته، میتوان با حلقه for کاراکترها را تکبهتک بررسی و پردازش کرد:
text = "Python"
for char in text:
print(f"کاراکتر: {char}")
توابع عمومی توکار روی رشته
توابع عمومی توکار (Built-in Functions)، به صورت عمومی روی رشتهها اعمال میشوند:
len(): شمارش تعداد کاراکترها (طول رشته).type(): بررسی نوع داده (کهstrبازمیگرداند).sorted(): مرتبسازی کاراکترها و بازگرداندن یک لیست.max()وmin(): یافتن بزرگترین و کوچکترین کاراکتر بر اساس کد اسکی (ASCII).
sample = "ecg-data"
print(len(sample)) # 8
print(sorted(sample)) # ['-', 'a', 'a', 'c', 'd', 'e', 'g', 't']
print(max(sample)) # 't'
معرفی متدهای پرکاربرد رشته
متد upper() و lower()
- کاربرد: تبدیل تمام حروف رشته به حروف بزرگ یا کوچک.
- صورت مسئله: استانداردسازی یک شناسه متنی ورودی به حروف بزرگ.
raw_id = "ecg_lead_v1"
upper_id = raw_id.upper()
print(upper_id) # ECG_LEAD_V1
متد strip() (و lstrip / rstrip)
- کاربرد: حذف فاصلهها یا کاراکترهای اضافی از ابتدا و انتهای رشته.
- صورت مسئله: پاکسازی فاصله تصادفی کاربر در زمان ثبتنام.
user_input = " Sina_user "
clean_user = user_input.strip()
print(f"'{clean_user}'") # 'Sina_user'
متد split()
- کاربرد: جداسازی یک رشته بر اساس یک جداکننده (Delimiter) و تبدیل آن به یک لیست.
- صورت مسئله: استخراج مقادیر یک ردیف از فایل CSV با جداکننده کاما.
csv_row = "Normal,72,Male,35"
data_list = csv_row.split(",")
print(data_list) # ['Normal', '72', 'Male', '35']
متد join()
- کاربرد: اتصال عناصر یک لیست متنی به یکدیگر با یک جداکننده مشخص.
- صورت مسئله: اتصال نام لیدهای قلبی با خط تیره جهت نامگذاری فایل.
leads = ["LeadI", "LeadII", "V1", "V6"]
joined_leads = "-".join(leads)
print(joined_leads) # LeadI-LeadII-V1-V6
متد replace()
- کاربرد: جایگزین کردن یک عبارت یا کاراکتر با عبارت دیگر.
- صورت مسئله: اصلاح خط فاصله با آندرلاین در نام ستونهای داده.
header = "heart-rate-bpm"
new_header = header.replace("-", "_")
print(new_header) # heart_rate_bpm
متد find()
- کاربرد: جستجوی موقعیت (ایندکس) یک زیررشته؛ در صورت عدم وجود،
-1برمیگرداند. - صورت مسئله: بررسی وجود کلمه
"Arrhythmia"در گزارش تشخیصی.
report = "Diagnosis: Sinus Arrhythmia detected."
pos = report.find("Arrhythmia")
print("موقعیت شروع کلمه:", pos) # 17
متد count()
- کاربرد: شمارش دفعات تکرار یک کاراکتر یا زیررشته.
- صورت مسئله: شمارش تعداد پیکهای شناساییشده (
R) در یک لاگ متنی.
sequence = "R_wave_R_wave_P_wave_R_wave"
print("تعداد R-wave:", sequence.count("R_wave")) # 3
متد startswith() و endswith()
- کاربرد: بررسی شروع یا پایان رشته با کاراکترهای مشخص (خروجی بولین).
- صورت مسئله: اعتبارسنجی پسوند فایل ذخیرهسازی سیگنال.
filename = "patient_102.mat"
is_valid_format = filename.endswith(".mat")
print("فرمت معتبر است؟", is_valid_format) # True
متد isdigit()
- کاربرد: بررسی اینکه آیا تمام کاراکترهای رشته عدد هستند یا خیر.
- صورت مسئله: اعتبارسنجی عددی بودن مقدار ورودی سن بیمار قبل از تبدیل به
int.
age_str = "45"
if age_str.isdigit():
age = int(age_str)
print("سن معتبر:", age)
متد format() و f-strings
- کاربرد: قالببندی و جایگذاری متغیرها درون رشته.
- صورت مسئله: ساخت پیام گزارش نهایی برای خروجی مدل پردازشی.
lead_name = "V5"
sampling_rate = 500
result_msg = f"سیگنال لید {lead_name} با فرکانس {sampling_rate} هرتز پردازش شد."
print(result_msg)
مثال کاربردی
میخواهیم یک خط لاگ متنی ثبتشده از دستگاه پایش بیمار (شامل شناسه بیمار، وضعیت تشخیصی و مقدار ضربان قلب) را که دارای فاصلههای اضافی و فرمت غیریکپارچه است دریافت کنیم. برنامه باید:
- فاصلههای زائد ابتدا و انتها را حذف کند.
- بخشهای لاگ را تفکیک و نام وضعیت را به حروف بزرگ استاندارد تبدیل کند.
- با استفاده از حلقه
forو متدisdigit()، کاراکترهای عددی ضربان قلب را از متن استخراج کرده و به عدد صحیح تبدیل کند. - با بررسی ابتدا و انتهای رشته، صحت فرمت لاگ را ارزیابی و اطلاعات نهایی را به صورت یک دیکشنری ساختاریافته برگرداند.
def analyze_signal_string_pipeline(raw_log: str) -> dict:
"""
تحلیل رشته گزارش ورودی، پاکسازی دادهها و استخراج اطلاعات کلیدی.
"""
# ۱. پاکسازی فاصلههای اضافی
cleaned_log = raw_log.strip()
# ۲. جداسازی بخشها بر اساس جداکننده سیمیکالن
parts = cleaned_log.split(";")
# استخراج مقادیر
patient_id = parts[0].replace("ID:", "").strip()
status = parts[1].replace("Status:", "").strip().upper()
readings = parts[2].replace("PULSE:", "").strip()
# ۳. شمارش و جداسازی کاراکترها با حلقه for
pulse_digits = []
for char in readings:
if char.isdigit():
pulse_digits.append(char)
pulse_rate = int("".join(pulse_digits)) if pulse_digits else 0
return {
"Patient_ID": patient_id,
"Status": status,
"Pulse_BPM": pulse_rate,
"Is_Valid": cleaned_log.startswith("ID:") and cleaned_log.endswith("BPM")
}
# ==========================================
# اجرای آزمایشی پایپلاین
# ==========================================
sample_data = " ID:PT-409 ; Status:arrhythmia ; PULSE: 84 BPM "
result = analyze_signal_string_pipeline(sample_data)
print("--- خروجی پردازش رشته ---")
for key, value in result.items():
print(f"{key}: {value}")
نتیجهگیری
نوع داده رشته (str) به دلیل ویژگی جداییپذیری (Iterable) و پشتیبانی از پیمایش با حلقه for، در کنار متدهای کلیدی پاکسازی و پردازش متن مانند strip، split، replace، join و isdigit، این امکان را میدهد که دادههای متنی خام و نامنظم را با کمترین حجم کد به ساختارهای داده استاندارد، تمیز و قابلتحلیل تبدیل کنیم.
