سلام دوستان عزیز ، حالتون چطوره ؟ مطلب امروزما در مورد python و رشته ها در پایتون (نوع داده ای string) میباشد که باز هم از مباحث مشترک در تمام زبانهای برنامه نویسی است .string از پرکاربرد ترین انواع داده ای در پایتون می باشد. به منظور ایجاد آن، کافی است تعدادی کاراکتر را در علامت نقل و قول محصور کرد. پایتون تک کوتیشن را با دابل کوتیشن یکسان دانسته و با آن ها به طور مشابه برخورد می کند. پروسه ی ایجاد رشته به آسانی تخصیص مقدار به یک متغیر می باشد. مثال:

var1 = ‘Hello World!’

var2 = “Python Programming”

دسترسی به مقادیر در رشته ها

در پایتون چیزی به نام نوع داده ای character وجود ندارد؛ زبان پایتون با این نوع داده ای به صورت رشته هایی با طول ۱ برخورد می کند (رشته هایی که خاصیت length آن برابر ۱ می باشد). از این رو آن ها را می توان یک substring نیز قلمداد کرد.

جهت استخراج substring ها، بایستی از [] همراه با اندیس شروع و اندیس پایان بهره گرفت.به عبارتی دیگر برای برش بخشی از یک رشته و و استخراج آن، از [] همراه با دو اندیس شروع و پایان بایستی استفاده کرد. مثال:

#!/usr/bin/python

var1 = ‘Hello World!’

var2 = “Python Programming”

print “var1[0]: “, var1[0]

print “var2[1:5]: “, var2[1:5]

نتیجه:

var1[0]: H

var2[1:5]: ytho

بروز رسانی رشته ها

می توان با الحاق (مجدد) یک متغیر به رشته ی دیگر، رشته ی جاری را بروز رسانی کرد. مثال:

#!/usr/bin/python

var1 = ‘Hello World!’

print “Updated String :- “, var1[:6] + ‘Python’

نتیجه:

Updated String :- Hello Python

کاراکترهای Escape

جدول زیر فهرستی از کاراکترهای گریز یا چاپ نشدنی را ارائه می دهد که با علامت \ شروع شده و نمایش داده می شوند.

کاراکتر گریز در هر دو نوع رشته ای که داخل تک کوتیشن و دابل کوتیشن محصور هستند قابل تفسیر می باشد.

Backslash
notation

کاراکتر شانزده شانزدهی (hexadecimal)

شرح

\a

۰x07

Bell یا alert

ایجاد صدای هشدار.

\b

۰x08

Backspace

بازگشت به عقب.

\cx

Control-x

\C-x

Control-x

\e

۰x1b

Escape

\f

۰x0c

Formfeed

ایجاد صفحه ی جدید.

\M-\C-x

Meta-Control-x

\n

۰x0a

Newline

خط جدید

\nnn

نشان گذاری هشت هشتی که در آن n در رینج ۰٫۷ قرار دارد.

\r

۰x0d

Carriage return

بازگشت به سر خط.

\s

۰x20

Space

خط فاصله.

\t

۰x09

Tab

چندین خط فاصله.

\v

۰x0b

Vertical tab

ایجاد چندین خط فاصله به صورت عمودی.

\x

Character x

\xnn

نشان گذاری شانزده شانزدهی که در آن n در برد ۰٫۹، a.f یا A.F قرار دارد.

عملگرهای رشته

با فرض اینکه متغیر رشته ای a مقدار ‘Hello’ و متغیر b مقدار ‘Python’ را نگه می دارد:

عملگر

شرح

مثال

+

اتصال – یک رشته را به رشته ی دیگر متصل می کند.

a + b رشته ی HelloPython را تولید می کند.

*

تکرار – با پیوند زدن چندین کپی از یک رشته، رشته ی جدیدی ایجاد می نماید.

a*2رشته ی HelloHello را تولید می کند.

[]

برش – کاراکتر مورد نظر را از اندیس مشخص شده انتخاب کرده و استخراج می کند.

a[1] کاراکتر e را ارائه می دهد.

[ : ]

برش در رینج مشخص شده (range slice) –دو اندیس می پذیرد که یکی شروع و مشخص کننده ی اولین کاراکتر و دیگری اندیس پایان و نشانگر آخرین کاراکتر استخراج شده می باشد.

a[1:4] کاراکترهای ell را استخراج می کند.

in

عضویت – در صورت موجود بودن کاراکتر مشخص شده در رشته ی مورد نظر، true برمی گرداند.

H in a بخاطر اینکه کاراکتر در رشته ی مورد نظر موجود می باشد، ۱ برمی گرداند.

not in

عضویت – در صورت موجود نبودن کاراکتر مورد نظر در رشته، true برمی گرداند.

مقدار ۱ را برمی گرداند.M not in a

r/R

Raw string (رشته ی خام) – کارکرد و معنی اصلی کاراکتر گریز را لغو می کند. به استثنای عملگر r/R که پیش از علامت نقل و قول قرار می گیرد، سینتکس رشته های خام درست مانند رشته های معمولی می باشد. “r” می تواند حرف کوچک یا حرف بزرگ (R) باشد، تنها مسئله ای که باید به آن دقت داشت، قرار دادن R درست پیش از علامت نقل و قول است.

دستور print r’\n’، \n را چاپ می کند و دستور print R’\n’، \n را.

%

فرمت دهی – یک رشته را قالب بندی می کند.

عملگر فرمت دهی رشته

یکی از امکانات جالب پایتون، عملگر % می باشد که برای فرمت دهی رشته ها بکار می رود. این عملگر منحصر به رشته ها می باشد (ورودی آن فقط رشته است) و جایگزین خانوداه ی printf() در زبان C می باشد. مثال:

#!/usr/bin/python

print “My name is %s and weight is %d kg!” % (‘Zara’, 21)

نتیجه:

My name is Zara and weight is 21 kg!

در زیر فهرست علامت هایی که می توان همراه با این عملگر مورد استفاده قرار داد را مشاهده می کنید:

علامت فرمت دهی

تبدیل

%c

کاراکتر.

%s

تبدیل به رشته با استفاده از تابع str()، قبل از فرمت دهی.

%i

عدد صحیح در مبنای ده علامت دار.

%d

عدد صحیح ده دهی علامت دار.

%u

عدد صحیح درمبنای ده بدون علامت.

%o

عدد صحیح هشت هشتی.

%x

عدد صحیح در مبنای شانزده (حروف کوچک).

%X

عدد صحیح در مبنای شانزده (حروف بزرگ).

%e

نماد توانی یا نمایی (با ‘e’ کوچک).

%E

نماد توانی یا نمایی (با ‘E’ بزرگ).

%f

عدد حقیقی ممیز شناور.

%g

مخفف یا فرم کوتاه تر %f و %e می باشد.

%G

شکل کوتاه تر %f و %E.

در زیر دیگر علامت ها و قابلیت هایی پشتیبانی شده را مشاهده می کنید:

علامت

کارکرد/قابلیت

*

آرگومان دقت اعشار یا حداقل تعداد کل را مشخص می کند.

تنظیم به سمت چپ.

+

علامت را نمایش می دهد.

یک خط فاصله قبل از عدد مثبت ایجاد می کند.

#

صفر آغازین هشت هشتی (‘۰’) یا صفر آغازین شانزده شانزدهی ‘۰x’ و یا ‘۰X’، بسته به اینکه ‘x’ یا ‘X’ بکار رفته، اضافه می کند.

۰

بجای خط فاصله یا فضای خالی، سمت چپ عدد را با صفر پر می کند.

%

استفاده ی همزمان از دو عملگر، ‘ %%’، به یک عملگر ‘%’ منتج می شود.

(var)

نگاشت متغیر (آرگومان های dictionary)

m.n.

m نشانگر حداقل تعداد عدد مجاز و n بیانگر تعداد عدد که بایستی پس از نقطه ی اعشار نمایش داده شود.

سه علامت نقل و قول به هم چسبیده (Triple Quotes)

علامت (“”” “””) این امکان را فراهم می کند که رشته ها را در چندین خط پخش کنید، در این میان می توانید از کاراکترهای ویژه نظیر NEWLINEs، TABs و غیره … استفاده کنید.

نحوه ی نگارش آن را می توانید در زیر مشاهده کنید:

#!/usr/bin/python

para_str = “””this is a long string that is made up of

several lines and non-printable characters such as

TAB ( \t ) and they will show up that way when displayed.

NEWLINEs within the string, whether explicitly given like

this within the brackets [ \n ], or just a NEWLINE within

the variable assignment will also show up.

“””

print para_str

پس از اجرای کد بالا، نتیجه ی زیر حاصل می گردد. مشاهده می کنید که چگونه هر یک یک از کاراکترها ویژه اثر خود را در نتیجه به نمایش گذاشته (برای مثال /tab دو فاصله ایجادکرد یا /n رشته را در خط بعدی ادامه داده) است.

this is a long string that is made up of

several lines and non-printable characters such as

TAB ( ) and they will show up that way when displayed.

NEWLINEs within the string, whether explicitly given like

this within the brackets [

], or just a NEWLINE within

the variable assignment will also show up.

کاراکتر ” \ ” در رشته های خام، به عنوان کاراکتر ویژه تفسیر نمی شود. کلیه ی کاراکترهایی که در یک رشته ی خام تایپ می کنید به همان گونه که نوشته اید چاپ می شوند:

#!/usr/bin/python

print ‘C:\\nowhere’

نتیجه:

C:\nowhere

حال به مثال زیر توجه کنید. عبارت را بدین صورت’ عبارت مربوطه r ‘ بکار می بریم:

#!/usr/bin/python

print r’C:\\nowhere’

نتیجه:

C:\\nowhere

رشته های یونیکد (Unicode string)

رشته های معمولی در پایتون به صورت ۸ بیتی اسکی (ASCII) ذخیره می شوند، در حالی که رشته های یونیکد به صورت ۱۶ بیتی Unicode ذخیره می گردند. کاراکترهای یونیکد این اجازه را می دهد که از مجموعه ی کاراکتری متشکل از انواع زبان های زنده ی دنیا بهره بگیرید. مثال:

#!/usr/bin/python

print u’Hello, world!’

نتیجه:

Hello, world!

همان طور که در این مثال مشاهده می کنید، رشته های یونیکد پیشوند u را بکار می برند، مشابه رشته های خام که از پیشوند r استفاده می کنند.

متدهایی درون ساخته ای که عملیاتی را روی رشته انجام دهند (Built-in String Methods)

پایتون با استفاده از توابع زیر روی رشته ها عملیاتی را انجام می دهد:

شماره ی رشته ی مورد نظر

متد مربوطه به همراه شرح کارکرد آن

۱

capitalize()

حرف اول یک رشته را به حرف بزرگ تبدیل می کند.

۲

center(width, fillchar)

این تابع دو ورودی می پذیرد؛ اولی طول رشته و دومی کاراکتری که در هر دو طرف رشته پر می کند، را مشخص می کند. سپس رشته را در وسط یا مرکز قرار می دهد.

۳

count(str, beg= 0,end=len(string))

این متد سه ورودی می پذیرد. اولی زیررشته ی ای که تعداد تکرار آن شمرده و برگردانده می شود را مشخص می کند، دومین پارامتر اندیس شروع که شمارش از آن آغاز می شود را تعیین می نماید و سومین آرگومان اندیس پایان که شمارش در آنجا خاتمه می یابد را تعریف می کند.

۴

decode(encoding=’UTF-8′,errors=’strict’)

رشته ی مورد نظر را با استفاده ی الگورتیم رمزگذاری یا کدک مشخص/ثبت شده، decode و رمز گشایی می کند. پارامتر encoding به صورت پیش فرض بر روی رمزگذاری default تنظیم می شود. به عبارتی دیگر این تابع رشته ی مورد نظر را بر اساس کدک مشخص شده رمزگشایی کرده و رشته ی decode شده را به عنوان خروجی برمی گرداند. پارامتر دومی نحوه ی مدیریت خطا را مشخص می شود که پیش فرض آن strict می باشد.

۵

encode(encoding=’UTF-8′,errors=’strict’)

نسخه ی کدگذاری شده ی رشته ی مورد نظر را بازمی گرداند. پارامتر اولی الگوریتم کد گذاری مشخص شده و پارامتر دوم نحوه ی مدیریت خطا را مشخص می کند. پیش فرض پارامتر دوم آن strict می باشد.

۶

endswith(suffix, beg=0, end=len(string))

مشخص می کند آیا یک رشته یا زیرشته ای از آن به پارامتر suffix ختم می شود یا خیر، در صورتی که به مقدار مشخص شده ختم شد true و در غیر این صورت false برمی گرداند. پارامتر beg اندیس شروع و پارمتر end اندیس پایان را مشخص می کند.

۷

expandtabs(tabsize=8)

این متد تعداد فاصله ی تب (مربوط به کاراکتر ویژه ی تب /t) یک رشته را به مقدار مشخص شده در پارامتر ورودی (تعیین کننده ی تعداد تب) بسط می دهد، در صورت مشخص نکردن پارامتر ورودی، به صورت پیش فرض بر روی ۸ تنظیم می شود.

۸

find(str, beg=0 end=len(string))

کاراکترهای مورد نظر را در رشته می یابد (مشخص می کند آیا پارامتر ورودی اول متد در رشته وجود دارد یا خیر)، پارامتر دوم مشخص کننده ی اندیس شروع و پارامتر سوم تعیین کننده ی اندیس پایان می باشد. در صورت یافتن رشته اندیس آغازی آن و در صورت نیافتن ۱- را برمی گرداند.

۹

index(str, beg=0, end=len(string))

عملکردی مشابه متد find() دارد، با این تفاوت که در صورت نیافتن رشته ی مورد نظر باعث رخداد یک خطا یا exception می شود.

۱۰

isalnum()

چنانچه حداقل ۱ کاراکتر یا تمامی کاراکترهای رشته الفبایی عددی (حرف عدد) باشد، مقدار true و در غیر این صورت false برمی گرداند.

۱۱

isalpha()

اگر حداقل یکی یا تمامی کاراکترهای رشته از نوع الفبا باشد، true و در غیر این صورت false را برمی گرداند.

۱۲

isdigit()

در صورتی که رشته مورد نظر حاوی فقط عدد باشد، مقدار true و در غیر این صورت false برمی گرداند.

۱۳

islower()

اگر حداقل یکی یا همه ی کاراکترهای داخل رشته lowercase باشد، true و در غیر این صورت false را بازگردانی می نماید.

۱۴

isnumeric()

چنانچه رشته ی یونیکد دربردارنده ی کاراکترهای عددی باشد، مقدار true و در غیر این صورت false را بازیابی می نماید.

۱۵

isspace()

چنانچه رشته ی مورد نظر تهی باشد (در آن هیچ کاراکتری به جز خط فاصله وجود نداشته باشد)، true و در غیر این صورت false را بازیابی می کند.

۱۶

istitle()

اگر حروف اول تمامی واژگان رشته uppercase باشد، true بازمی گرداند.

۱۷

isupper()

چنانچه تمامی کاراکترهای رشته ی مورد نظر با حروف بزرگ نوشته شده باشد، true و در غیر این صورت false را برمی گرداند.

۱۸

join(seq)

المان های رشته ی seq را توسط تفکیک گر مشخص شده (برای مثال “-“) به هم متصل کرده و آن را به عنوان خروجی برمی گرداند.

۱۹

len(string)

طول رشته (تعداد کاراکترهای) رشته را برمی گرداند.

۲۰

ljust(width[, fillchar])

یک رشته را با کاراکتر تعریف شده در پارامتر دوم از سمت راست پر می کند تا به تعداد کاراکتر تعریف شده در پارامتر اول برسد.

۲۱

lower()

کلیه ی حروفی که در رشته ی مورد نظر uppercase هستند را به حروف کوچک تبدیل می کند.

۲۲

lstrip()

تمامی کاراکترهای مشخص شده (به صورت پیش فرض کاراکتر space) در پارامتر ورودی را از اول یک رشته حذف می کند.

۲۳

maketrans()

برای استفاده از این تابع ابتدا باید آن را تعریف کرد که در ابتدای اسکریپت این کار انجام شده است. این متد دو آرگومان می پذیرد که کار ترجمه را انجام می دهند، بدین معنی که به ازای مقادیری که در intab قرار داده می شود معادل آن ها در outtab قرار می گیرند. مثلا اگر مقدار intab برابر a بود و مقدار outtab برابر ۱ بود آنگاه در رشته هرگاه کاراکتر a دیده شد برنامه مقدار آن را با ۱ جایگزین می کند.

۲۴

max(str)

این متد بزرگترین کاراکتر را به ترتیب حروف الفبا بر میگرداند.

۲۵

min(str)

کوچکترین کاراکتر را به ترتیب حروف الفبا بر میگرداند.

۲۶

replace(old, new [, max])

این تابع سه آرگومان می پذیرد که دوتای آنها الزامی و یکی از آنها بسته به نوع استفاده لازم می شود. در پارامتر اول مقداری را ارائه می دهیم و در پارامتر دوم مشخص می کنیم که این مقدار را با مقدار پارامتر اول جایگزین کن. پارامتر سوم یک عدد را می گیرد که نشانگر این است که تا چند مرتبه این فعل در رشته ی مورد نظر انجام شود.

۲۷

rfind(str, beg=0,end=len(string))

عملکردی مشابه متد find() دارد با این تفاوت که جستجو را از سمت راست شروع می کند.

۲۸

rindex( str, beg=0, end=len(string))

کارکرد مشابه متد index() دارد با این تفاوت که جستجو را بجای چپ از سمت راست شروع می کند.

۲۹

rjust(width,[, fillchar])

در این متد آرگومان width نمایشگر تعداد کاراکتری که مایلید justify (هم تراز) کنید و fillchar نیز نشانگر مقداری می باشد که می خواهید از آن برای justify کردن استفاده نمایید.

این تابع یک نسخه ی از رشته بازمی گرداند که در آن سمت چپ رشته با کاراکتر مشخص شده در پارامتر ورودی دوم پر شده تا طول کلی رشته با مقدار مشخص شده در پارامتر اول برابر شود.

۳۰

rstrip()

تمامی کاراکترهای مشخص شده (در صورت مشخص نکردن، پیش فرض کاراکتر space می باشد) در پارامتر ورودی را از پایان یک رشته حذف می کند.

۳۱

split(str=””, num=string.count(str))

این متد رشته ی مورد نظر را در قالب لیستی برمی گرداند و کلمات موجود در آن را توسط تفکیک گر (پیش فرض “”) و به تعداد (زیر رشته های مشخص شده در ورودی num) مشخص شده تقسیم می کند.

۳۳

startswith(str, beg=0,end=len(string))

این متد بررسی می کند که رشته ی مورد نظر با زیررشته ی مشخص شده در پارامتر ورودی str آغاز شده یا خیر، اگر چنین بود مقدار true و در غیر این صورت مقدار false را برمی گرداند. Beg بیانگر اندیس شروع و end نشانگر اندیس پایان می باشد.

۳۴

strip([chars])

عملیات هر دو متد lstrip() و rstrip() را بر روی رشته ی مورد نظر اجرا می کند.

۳۵

swapcase()

حروف کوچک را بزرگ و حروف بزرگ را کوچک می کند.

۳۶

title()

یک کپی از رشته بازمی گرداند که اولین حرف تمامی کلمات آن با حرف بزرگ و باقی آن ها با حروف کوچک چاپ شده است.

۳۷

translate(table, deletechars=””)

متد translate یک کپی از رشته برمی گرداند که درآن تمامی کاراکترها با استفاده از table (ساخته شده از تابعmaketrans() در string module)، ترجمه شده است و در صورت نیاز تمامی کاراکترهای موجود در رشته ی deletechars را حذف می کند.

۳۸

upper()

حروف کوچک یک رشته را به حروف بزرگ تبدیل می کند.

۳۹

zfill (width)

کپی از رشته ی مورد نظر برمی گرداند که سمت چپ آن با صفر پر شده تا طول نهایی رشته برابر با طول مشخص شده در پارامتر width شود.

۴۰

isdecimal()

این متد در صورتی که رشته ی یونیکد دربردارنده ی فقط کاراکترهای ده دهی باشد، true و در غیر این صورت false برمی گرداند.