<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های میلادقاسمی</title>
        <link>https://virgool.io/feed/@miladghasemi</link>
        <description>مدیر دیتابیس و مهندس داده</description>
        <language>fa</language>
        <pubDate>2026-06-10 14:08:36</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/23618/avatar/rZpuBz.png?height=120&amp;width=120</url>
            <title>میلادقاسمی</title>
            <link>https://virgool.io/@miladghasemi</link>
        </image>

                    <item>
                <title>String formating and print in python 3</title>
                <link>https://virgool.io/coderlife/string-formating-and-print-in-python-3-et4bobme2ss7</link>
                <description>در این آموزش قصد دارم String formating و امکانات مختلفی که print تو پایتون ۳ داره را آموزش بدم. من در این آموزش از نسخه ۳.۷.۳ پایتون استفاده می کنم پس با من همراه باشید :)اولین مثالی که میخوام بزنم ساده ترین کاری هستش که این تابع می تونه انجام بده و اونم چاپ یک رشته  هستشprint (&quot;Hello, World!&quot;)

Hello, World!برای استفاده از تابع پرینت تو پایتون ۳ بر خلاف پایتون ۲ شما باید مثل مثال بالا از پرانتز استفاده بکنید.در مثال بالا شما می تونید به جای &quot;&quot; از &#x27; &#x27;  هم استفاده بکنید ولی این نکته رو یادتون باشه که اگه از سینگل کوتیشن استفاده بکنید و داخل اون رشته ای  که میخواهید چاپ کنید یدونه سینگل کوتیشن هم وجود داشته باشه به مشکل بر می خورید. مثال زیر مشکل ایجاد شده رو نشون میده:print(&#039;Don&#039;t cry&#039;)
  File &quot;&lt;stdin&gt;&quot;, line 1
      print(&#039;Don&#039;t cry&#039;)
                       ^
SyntaxError: invalid syntaxاما برای حل مشکل بالا می تونید از دو روش زیر استفاده بکنید:print(&#039;Don\&#039;t cry&#039;)

Don&#039;t cryیاprint(&quot;Don&#039;t cry&quot;)

Don&#039;t cryبا print می تونید چندتا رشته بهم بچسبونید و یک جا چاپ کنید:print(&quot;Python&quot; + &quot; is &quot; + &quot; a &quot; + &quot; greate language&quot;)

Python is  a  greate languageدر مثال زیر  این تابع میاد  مقدار یک متغییر چاپ می کنه:age = 24
print (age)

24اگه بخوام مقدار متغییر بالارو با یه متن چاپ کنم به شکل زیر عمل می کنم:print (&quot;My age is: &quot;, age)

My age is:  24به مثال زیر توجه کنید:print (&quot;My age is: &quot; + age)

Traceback (most recent call last):
    File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
TypeError: can only concatenate str (not &quot;int&quot;) to strدر مثال بالا بر خلاف مثال قبلی شما نمی تونید یک عدد به یک رشته concatenate (الحاق،پیوستن) کنید اگه میخواهید اینکار بکنید می تونید از روش زیر استفاده بکنید:print (&quot;My age is: &quot; + str(age))

My age is: 24در مثال بالا به صورت موقت  متغییر age که از نوع int یا عدد صحیح هستش را به str تبدیل کردم تا بشه در تابع پرینت جهت چاپ استفاده کرد.در مثال زیر تابع پرینت داخل یک حلقه استفاده کردم تا مقادیر یک لیست دونه به دونه  نشون بده:lst = [4, 5, 8, 8, 3]
for _ in range(0, len(lst)):
    print(lst[_])
    
4
5
8
8
3همچنین توی تابع پرینت شما می تونید از توابع دیگه برای کارهای مختلف استفاده بکنید، مثلا چاپ یک رشته به صورت حروف بزرگ و ... .مثلا در مثال زیر میاییم بیشترین عددی که تکرار شده رو چاپ می کنیم:lst = [4, 5, 8, 8, 3]
print(max(set(lst), key = lst.count))

8اگه می خواهید مقادیر لیست بالا بدون استفاده از حلقه و با فاصله از هم چاپ بشن میشه از روش  زیر استفاده کرد:print(*lst)

4 5 8 8 3اگه می خواهید به جای اینکه اعداد با فاصله از هم جدا کنید، مثلا از کاما برای جدا کردن اعداد استفاده کنید می تونید از روش زیر استفاده بکنید:print(*lst, sep=&#039;, &#039;)

4, 5, 8, 8, 3
 
print(*lst, sep=&#039; &gt; &#039;)

4 &gt; 5 &gt; 8 &gt; 8 &gt; 3همچنین می تونید از روش زیر استفاده بکنید:for i in lst:
    print(i, end=&#039;.  &#039;)
    
4. 5. 8. 8. 3. 4. 5. 8. 8. 3.اگه می خواهید مقدار یک متغییر یا رشته را چندبار چاپ کنید می تونید به روش زیر عمل کنید:name = &#039;milad&#039;
print (name * 3)

miladmiladmiladدر مثال بالا name حاوی رشته ای است که قرار است چاپ بشود و 3 هم مربوط به تعداد دفعاتی است که رشته قرار است تکرار بشود.خوب اما برسیم به مبحث String formatting فکر کنید ما میخواهیم خط زیر در پایتون با استفاده از تابع پرینت چاپ کنیم:My name is milad, python is number 1در متن بالا کلمه milad و 1 مقادیر دو تا متغییر هستند و می توانند عوض بشوند ولی بقیه جمله ثابت هستش. جاهایی که ما یه متن ثابت داریم و فقط قراره بخشی از اون عوض بشه میاییم از string formatting استفاده می کنیم که خودش انواع مختلفی داره که به شرح زیر هستش:۱− استایل قدیمیاین روش خودش به دو صورت قابل استفاده هستش. روش اول:name = &#039;milad&#039;
number = 1
print (&quot;My name is %s, python is number %d&quot; %(name, number))

My name is milad, python is number 1در مثال بالا از s% برای جای گذاری یک رشته و از d% که برای جای گذاری یک عدد است استفاده کردم. و در آخر در داخل ()% میام متغییر یا مقدارهایی که قرار است به جای s% و d% نمایش داده بشود را می نویسم. مثال بالا را می توان به صورت زیر هم نوشت:print (&quot;My name is %s, python is number %d&quot; %(&#039;milad&#039; , 1))

My name is milad, python is number 1در مثال بالا به جای استفاده از متغییر اومدم مستقیما مقدار مورد نظر نوشتم.روش دوم استایل قدیمی :name = &#039;milad&#039;
number = 1
print (&quot;My name is %(name)s, python is number %(num)d&quot; %{&quot;name&quot; : name, &quot;num&quot; : number})

My name is milad, python is number 1در روش بالا اومدم بین هر % و s یا d داخل پرانتز یه نامی تعریف کردم تا با استفاده از این نام در ادامه بیام اون مقداری که می خوام در داخل متن قرار بدم. خوبی این روش اینه که نیاز به رعایت ترتیب در نوشتن مقادیر و متغییرها جهت چاپ در متن نیست و آزادی بیشتری در چاپ داریم. 2- روش str.formatاین روش تو پایتون 3 معرفی شدش ولی بعدا تو پایتون 2.7 هم از این روش استفاده شد. این روش میشه به دو صورت استفاده کردش. روش اول :name = &#039;milad&#039;
number = 1
print (&quot;My name is {}, python is number {}&quot;.format(name, number))

My name is milad, python is number 1تو این روش هرجایی که قراره یه چیزی قرا بگیره باید از {} استفاده بکنید و در آخر در داخل ()format بیایید اون متغییر یا مقادیری که قرار است در متن نمایش داده بشوند را بنویسیم.روش دوم :name = &#039;milad&#039;
number = 1
print (&quot;My name is {name}, python is number {num}&quot;.format(name = name, num = number))

My name is milad, python is number 1این روش شبیه روش دوم بخش استایل قدیمی هستش ولی با این تفاوت که این شیوه منظم تر و بهتر از استایل قبلی هستش.3- استایل f-stringاین استایل در پایتون 3.6 معرفی شدش و به نظر من بهترین و دم دست ترین استایل بین استایل های دیگه هستش شیوه استفاده از این استایل هم به صورت زیر هستش:name = &#039;milad&#039;
number = 1
print( f&quot;my name is {name}, python is number {number}&quot;)

My name is milad, python is number 1در این استایل دیگه خبری از % و format و این جورچیزا نیستش و کافیه قبل متنتون یدونه f بذارید و در داخل متنی که می خواهید چاپ کنید بیایید متغییرهایی که می خواهید رو داخل {} استفاده بکنید به همین سادگی!</description>
                <category>میلادقاسمی</category>
                <author>میلادقاسمی</author>
                <pubDate>Sun, 28 Jul 2019 10:23:40 +0430</pubDate>
            </item>
                    <item>
                <title>Organizing files in python - part 3</title>
                <link>https://virgool.io/coderlife/organizing-files-in-python-part-3-wihseylskpjp</link>
                <description>به قسمت سوم آموزش سازماندهی و کار با  فایل ها و دایرکتوری ها در پایتون خوش آمدید . قسمت قبلی این آموزش را می توانید در اینجا بخوانید.os.path.join()دو یا چند آدرس را هوشمندانه به هم می چسباند و تبدیل به یک آدرس می کند.path = os.path.join(os.environ[&#039;HOME&#039;], &#039;Downloads&#039;, &#039;python&#039;)
print(path)

/home/milad/Downloads/pythonos.path.abspath()برای نشان دادن آدرس کامل جایی که هستیم می باشد. همچنین اگر نیاز داشتیم تا آدرس کامل یک فایل یا دایرکتوری را داشته باشیم می توانیم از این متد استفاده بکنیم.os.path.abspath(&#039;.&#039;)

&#039;/home/milad/Downloads/python&#039;os.path.abspath(&#039;python.png&#039;)

&#039;/home/milad/python.png&#039;os.path.abspath(&#039;directory&#039;)

&#039;/home/milad/directory&#039;os.path.basename()زمانی که به این متد آدرس داده شود نام فایل یا دایرکتوری که در آخر آدرس باشد را بر می گرداند.path = &#039;/home/linusek/Downloads/python&#039;
dir_name = os.path.basename(path)
print(dir_name)

&#039;python&#039;os.path.splitext()اگر نام یک فایل را به این متد بدهیم نام فایل و فرمت آن را از هم جدا می کند.file_name, file_format = os.path.splitext(&#039;python.png&#039;)
print(f&#039;file name : {file_name} , file format : {file_format}&#039;)

file name : python , file format : .pngهمچنین می توان به صورت مستقیم به نام فایل یا فرمت آن دسترسی داشت به صورت زیر: os.path.splitext(&#039;python.png&#039;)[0]
 
 &#039;python&#039;فقط در استفاده از این متد یک نکته وجود دارد اگر نام فایل را به همراه آدرس آن بنویسید خروجی به صورت زیر می شود:file_name, file_format = os.path.splitext(&#039;/home/milad/python.png&#039;)
print(f&#039;file name : {file_name} , file format : {file_format}&#039;)

file name : /home/milad/python , file format : .pngهمانطور که مشاهده می کنید زمانی که آدرس آن فایل را هم بنویسید، این متد به جای جدا کردن نام و فرمت فایل میاید آدرس آن فایل و نام فایل را از فرمت فایل جدا می کند. می توان از روش زیر استفاده نمود تا خروجی به صورت بالا در نیاید:file_name, file_format = os.path.splitext(os.path.basename(&#039;/home/linusek/python.png&#039;))
print(f&#039;file name : {file_name} , file format : {file_format}&#039;)

file name : python , file format : .pngos.stat()اطلاعاتی در رابطه با فایل و دایرکتوری می دهد که به شرح زیر می باشد:st_mode = protection bitsst_ino = inode numberst_device = devicest_nlink = تعداد هاردلینکst_uid = یوزر آی دی مالک فایل یا دایرکتوریst_gid = یوزر گروه مالک فایل یا دایرکتوریst_size = سایز به بایت را نشان دادهst_atime = آخرین زمان دسترسیst_mtime = آخرین زمان دستکاریst_ctime = آخرین زمان تغییر متادیتاos.stat(&#039;python.png&#039;)

os.stat_result(st_mode=33188, st_ino=42468021, st_dev=2056, st_nlink=1, st_uid=1000, st_gid=985, st_size=202169, st_atime=1554684569, st_mtime=1554597604, st_ctime=1554597604)اگر فقط مشخصه خاصی را می خواهید می توانید به صورت زیر عمل کنید:os.stat(&#039;directory&#039;).st_size

4096os.path.getmtime()آخرین زمان دستکاری فایل یا دایرکتوری را نشان می دهد.os.path.getmtime(&#039;python.png&#039;)

1554597604.1962452همان گونه  که می بینید زمان به نمایش درآمده خوانا نبوده، برای خوانایی بهتر می توان به صورت زیر عمل نمود:from datetime import datetime
mode_time = datetime.fromtimestamp(os.path.getmtime(&#039;python.png&#039;))
print(mode_time)

2019-04-07 00:40:04.196245os.system&#40;&#41;می توان دستورات ترمینال را در این متد اجرا نمود.os.system&#40;&#039;ls -ltrh python.png&#039;&#41;

-rw-r--r-- 1 linusek users 198K Apr  7 00:40 python.pngglob.glob()متد glob موجود در glob لیست فایل ها و دایرکتوری ها را نشان می دهد. تفاوت این متد با os.listdir در این است که ما می توانیم در این متد از WildCardها استفاده بکنیم.import glob
glob.glob(&#039;&#039;/home/milad/programming/[pP]*&#039;)

[&#039;python&#039;, &#039;Perl&#039;, &#039;python unit test&#039;]در خط دوم گفتیم برو در مسیر home/milad/programming دنبال فایل یا دایرکتوری هایی بگرد که نام اولشان با حرف p بزرگ یا کوچک شروع شده باشد.os.remove()این متد برای حذف فایل می باشد. در صورت اقدام به حذف دایرکتوری با این متد استثنا رخ می دهد.os.remove(&#039;python.png&#039;)در استفاده از این متد محتاط باشید زیرا در صورت اشتباه فایل دیگری را اقدام به حذف خواهید کرد!os.remove(&#039;course&#039;)

Traceback (most recent call last):
    File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
IsADirectoryError: [Errno 21] Is a directory: &#039;course&#039;همانطور که می بینید این متد قادر به حذف دایرکتوری نمی باشد.os.removedirs()اقدام به حذف دایرکتوری ها به صورت بازگشتی می کند. مثلا اگر داشته باشیم foo/dir1/dir2 ابتدا dir2 را حذف می کند سپس  dir1 حذف می کند و در آخر foo را حذف می کند. فقط توجه فرمایید تمامی دایرکتوری ها باید فاقد فایل باشند تا بتوان آن ها را حذف نمود.os.removedirs(&#039;foo/dir1/dir2&#039;)os.rmdir()برای حذف دایرکتوری های خالی می باشد.os.rmdir(&#039;music&#039;)shutil.rmtree()برای حذف دایرکتوری هایی می باشد که دارای محتویات بوده.shutil.rmtree(&#039;/home/milad/books&#039;)در کد بالا دایرکتوری books را که دارای محتویات بوده است را حذف کردیم.subprocess.call()می توان با استفاده از این متد دستورات قابل اجرا در ترمینال را اجرا کرد. این متد روش بهتر و پیشنهاد شده ای نسبت به os.system می باشد.import subprocess
subprocess.call(&#039;ls -ltrh python.png&#039;, shell=True)

-rw-r--r-- 1 linusek users 198K Apr  7 00:40 python.pngsubprocess.check_ouput()همانند متد قبلی بوده با این تفاوت که می توان خروجی دستور اجرا شده را در متغییر ذخیره کرد.import subprocess
output = subprocess.check_output(&#039;ls -ltrh python.png&#039;&#039;, shell=True)
print(output)

-rw-r--r-- 1 linusek users 198K Apr  7 00:40 python.pngos.startfile&#40;&#41;متاسفانه این متد فقط در ویندوز قابل استفاده بوده (حداقل تا نسخه ۳.۷.۲ اینجوری هستش)،  اما به هر حال اگر شما به این متد مسیر یک فایل را بدهید آن فایل با برنامه پیش فرض انتخاب شده شروع به اجرا می کند.os.startfile&#40;&#039;C:\pirahan_sorati.mp3&#039;&#41;در مثال بالا فایل pirahan_sorati.mp3 مثلا با برنامه vlc که به عنوان برنامه پیش فرض برای پخش فایل های صوتی از سمت کاربر انتخاب شده است پخش می شود. شما می توانید در تنظیمات مشخص کنید که هر فایل با چه برنامه ای اجرا بشود. (شاید بشینم همچین قابلیتی برای گنو هم اضافه بکنم :) )shutil.copy()متد copy در ماژول shutil برای کپی کردن فایل ها می باشد. ابتدا نام فایلی که قرار است کپی شود را نوشته و سپس مقصد آن را. در صورت موفقیت آمیز بودن عمل کپی، مقدار بازگشتی آن آدرس مقصد و نام فایلی است که کپی شده است. زمانی که یک فایل را کپی می کنید زمان دسترسی و آخرین زمان دستکاری آن هم به روز می شود.shutil.copy(&#039;python.png&#039;, &#039;/home/milad/pictures/python-pic&#039;)

&#039;/home/milad/pictures/python-pic/python.png&#039;شما قادر هستید تا نام فایلی که قرار است کپی شود را در مقصد با یک نام دیگر ذخیره کنید به صورت زیر:shutil.copy(&#039;python.png&#039;, &#039;/home/milad/pictures/python-pic/new_python.png&#039;)

&#039;/home/milad/pictures/python-pic/new_python.png&#039;در مثال بالا فایل python.png که قرار است کپی شود را در مقصد با نام new_python.png کپی کردیم. نکته ای که در مورد این متد وجود دارد اگر از نام فایلی که قرار است کپی شود در مقصد وجود داشته باشد عمل overwrite بر روی آن فایل انجام می شود، پس در کپی کردن فایل ها محتاط باشید تا تا بر اثر اشتباه محتویات یک فایل را پاک نکنید.files = os.listdir(&#039;/home/milad/Downloads&#039;)
for file in files:
    if file.endswith(&#039;pdf&#039;):
        shutil.copy(file, &#039;/home/milad/books&#039;)

&#039;/home/milad/books/uml.pdf&#039;
&#039;/home/milad/books/avr.pdf&#039;
&#039;/home/milad/books/Git-pro.pdf&#039;در مثال بالا ابتدا لیست تمامی فایل های موجود در  home/milad/Downloads را در متغییر files ذخیره کرده ایم. در حلقه از شرط استفاده کردیم و گفتیم اگر نام هر فایل موجود در این لیست با pdf تموم شده بود بیا این فایل ها را در مسیر home/milad/books کپی کن. به همین راحتی تونستیم کاری که  حوصله سر بر و زمان بر بودش را  با نوشتن یک اسکریپت در عرض چند ثانیه به راحتی کپی کنیم. پس این خلاقیت شماس که چجوری بتونید با استفاده از  این چیزهایی که آموزش دادم کارهای دستی خودتونو به صورت اتوماتیک در بیارید یا مشکلات را  حل کنید.منتظر قسمت بعدی این آموزش باشید.اگر این آموزش برای شما مفید بود خوشحال میشم با لایک کردن این مطلب باعث دلگرمی بشید. با تشکر</description>
                <category>میلادقاسمی</category>
                <author>میلادقاسمی</author>
                <pubDate>Mon, 08 Apr 2019 17:36:22 +0430</pubDate>
            </item>
                    <item>
                <title>Organizing files in python - part 2</title>
                <link>https://virgool.io/coderlife/organizing-files-in-python2-ofdh7ke1qtxz</link>
                <description>به قسمت دوم آموزش سازماندهی و کار با  فایل ها و دایرکتوری ها در پایتون خوش آمدید . قسمت قبلی این آموزش را می توانید در اینجا بخوانید.os.mkdir()این متد برای ساخت دایرکتوری مورد استفاده قرار می گیرد.os.mkdir(&quot;/home/milad/photo&quot;)توجه کنید در صورتی که فقط نام دایرکتوری را بنوسید دایرکتوری در مکانی که هستید ساخته می شود.  اگر دایرکتوری ای که می خواهید بسازید از قبل موجود باشد استثنا FileExistError رخ می دهد.os.makedirs()کار این متد شبیه متد قبلی هستش ساخت دایرکتوری اما با این تفاوت که شما می توانید دایرکتوری های تو در تو بسازید.os.mkdir(&quot;1/2/3&quot;)در مثال بالا دایرکتوری ۳ در درون دایرکتوری ۲ ساخته می شود ، دایرکتوری ۲ در درون دایرکتوری ۱ ساخته می شود و خود دایرکتوری  ۱ در درون دایرکتوری فعلی ساخته می شود. در صورتی که این دایرکتوری ها از قبل موجود باشد استثنا رخ می دهد.os.makedirs(&quot;1/2/3&quot;)

Traceback (most recent call last):
  File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
  File &quot;/usr/lib/python3.7/os.py&quot;, line 221, in makedirs
     mkdir(name, mode)
FileExistsError: [Errno 17] File exists: &#039;1/2/3&#039;در صورتی که می خواهید این استثنا نشان داده نشود باید نوشت:os.makedirs(&quot;1/2/3&quot;,exist_ok=True)os.access(path, mode)برای بررسی موجود بودن فایل و دایرکتوری و همچنین بررسی مجوز دسترسی می باشد که دارای مدهای زیر می باشد:F_OK : برای بررسی موجود بودن فایل و دایرکتوری می باشدR_OK: برای بررسی مجوز خواندن می باشدW_OK: برای بررسی مجوز نوشتن می باشدX_OK: برای بررسی مجوز اجرا می باشددر صورتی که فایل یا دایرکتوری مورد نظر دارای آن مجوز باشد یا موجود باشد مقدرا True را بر می گرداند.os.access(&quot;1&quot;,os.F_OK)

Trueهمچنین می توان از ترکیب این مجوزها هم استفاده کرد به صورت زیر:os.access(&quot;links.txt&quot;,os.F_OK or os.R_OK or os.W_OK)

Trueos.access(&quot;links.txt&quot;,os.F_OK or os.X_OK or os.R_OK or os.W_OK)

Falseos.environمتغییرهای محیطی را نشان می دهد (متغییرهای محیطی در هر سیستم عامل برای اهداف خاص خود سیستم عامل یا برنامه های جانبی تعریف و مقدار دهی شده اند). os.environ

(:از اونجایی که خروجیش خیل زیاد بودش از گذاشتن صرف نظر کردماگر می خواهید فقط مقدار یک متغییر نشان داده بشود کافیست نوشت:os.environ[&quot;HOME&quot;]

&quot;/home/milad&quot;این متد به عنوان Mapping object  هم شناخته می شود که یک دیکشنری را بر می گرداند که مثلا می توان نوشت:os.environ.get(&quot;HOME&quot;)

&quot;/home/milad&quot;از آنجایی که گفته شد دیکشنری را برمی گرداند می توان از keys و values دیکشنری هم استفاده نمود.os.environ.keys()

os.environ.values()در صورتی که متغییری وجود نداشته باشد این متد ارور می دهد.os.environ[&quot;TEST&quot;]

Traceback (most recent call last):
 File &quot;&lt;stdin&gt;&quot;, line 1, in &lt;module&gt;
  File &quot;/usr/lib/python3.7/os.py&quot;, line 678, in __getitem__
     raise KeyError(key) from None
     KeyError: &#039;TEST&#039;os.rename()برای تغییر نام فایل یا دایرکتوری می باشد. ابتدا نام فایل یا دایرکتوری که قرار است عوض بشود را بنویسید و سپس نام جدید آن را به صورت زیر:os.rename(&quot;1&quot;, &quot;directory&quot;)در مثال بالا نام دایرکتوری ۱ که قبلا توسط متد makedirs درست کرده بودیم راه به directory تغییر دادیم.os.path.exist()این متد بررسی می کند که آیا فایل یا دایرکتوری مورد نظر موجود می باشد یا نه.os.path.exists(&#039;directory&#039;)

Trueos.path.getsize()حجم فایل و دایرکتوری را به بایت نشان می دهد.os.path.getsize(&#039;python.png&#039;)

202169os.path.isfile&#40;&#41;اگر مسیر داده شده به فایل ختم شود True را بر می گرداند.os.path.isfile&#40;&quot;/home/milad/python.png&quot;&#41;

Trueos.path.isfile&#40;&quot;/home/milad/directory&quot;&#41;

Falseمی توان با استفاده از ماژول ‌pathlib هم اینکار را انجام داد:import pathlib
check = pathlib.Path(&quot;/home/milad/python.png&quot;)
if check.is_file&#40;&#41;:
    print(&quot;It&#039;s a file&quot;)
    
It&#039;s a fileفقط توجه کنید حرف اول Path بزرگ می باشد.os.path.isdir()اگر مسیر داده شده به دایرکتوری ختم شود True را بر می گرداند.os.path.isdir(&quot;/home/milad/python.png&quot;)

Flaseos.path.isdir(&quot;/home/milad/directory&quot;)

Trueمی توان با استفاده از ماژول ‌pathlib هم اینکار را انجام داد:import pathlib
check = pathlib.Path(&quot;/home/milad/directory&quot;)
if check.is_dir():
    print(&quot;It&#039;s a directory&quot;)
    
It&#039;s a directoryفقط توجه کنید حرف اول Path بزرگ می باشد.os.path.dirname()زمانی که به این متد مسیر یک فایل یا دایرکتوری را بدهید، آدرس قبل از آن فایل یا دایرکتوری را بر می گرداند.os.path.dirname(&#039;/home/milad/Downloads/FreeBSD.iso&#039;)

&#039;/home/milad/Downloads&#039;os.path.dirname(&#039;/home/milad/Downloads/python&#039;)

&#039;/home/milad/Downloads&#039;os.path.split()در مسیر داده به این متد، آخرین مسیر( که دایرکتوری یا فایل است) را از بقیه مسیر جدا می کند.file_path, file_name = os.path.split(&quot;/home/milad/python.png&quot;)
print(f&quot;file path : {file_path} , file name : {file_name}&quot;)

file path : /home/milad , file name : python.pngدر صورتی که بخواهید فقط نام فایل/دایرکتوری یا مسیر آن را ذخیره کنید می توانید به صورت زیر عمل کنید:dir_name = os.path.split(&quot;/home/milad/directory&quot;)[1]
print(dir_name)

directory
برای ذخیره مسیر  به جای [1] نوشته [0]منتظر ادامه این آموزش باشید.</description>
                <category>میلادقاسمی</category>
                <author>میلادقاسمی</author>
                <pubDate>Mon, 08 Apr 2019 01:41:17 +0430</pubDate>
            </item>
                    <item>
                <title>Organizing files in python</title>
                <link>https://virgool.io/python-community/organizing-files-in-python-cvpl9trsyevz</link>
                <description>در این پست و پست های دیگر قراره آموزش سازماندهی فایل ها و دایرکتوری ها در پایتون را آموزش بدم مثل ایجاد پوشه ، کپی کردن فایل ها، به درست آوردن مشخصات سیستم عامل و ... . در این آموزش از ماژول های os, shutil, glob, pathlib, send2trash,subprocess و چندتا ماژول دیگه استفاده می کنم و  اینکه من از نسخه ۳.۷.۲ پایتون استفاده می کنم .در تمامی کدهای اجرا شده خط یا خطوط آخر، نمونه خروجی تولید شده توسط کد می باشد که بعد از یک خط خالی نوشته شده است تا خوانندگان عزیز نمونه خروجی هر کد را ببینند.os.uname()اطلاعات مشخصات سیستم عامل را نشان می دهد (خروجی این متد در پایتون ۲ و ۳ اندکی متفاوت می باشد). خروجی این دستور در پایتون ۳ به شرح زیر می باشد:sysname : نام سیستم عامل را نشان می دهدnodename : نام هاست ماشین را نشان می دهدrelease : نسخه هسته را نشان می دهدversion : نسخه سیستم عامل را نشان می دهدmachine : معماری سیستم را نشان می دهدprint(os.uname())

posix.uname_result(sysname=&#039;Linux&#039;, nodename=&#039;pc&#039;, release=&#039;4.15.0-46-generic&#039;, version=&#039;#49-Ubuntu SMP Wed Feb 6 09:33:07 UTC 2019&#039;, machine=&#039;x86_64&#039;)اگر می خواهید مثلا فقط نام سیستم عامل نشان داده بشود باید نوشت:print(os.uname()[0])

&#039;Linux&#039;os.getuid()یوزر آی دی پروسه فعلی را نشان می دهد.print(os.getuid())

۱۳۲۷os.getgid()آی دی گروه پروسه فعلی را نشان می دهد.print(os.getgid())

۱۳۲۷os.getpid()آی دی پروسه فعلی را نشان می دهد.print(os.getpid())

۱۸۸۳۵os.getlogin()نام کاربری که به سیستم لاگین کرده است را نشان می دهد.print(os.getlogin())

&#039;milad&#039;os.getcwd()آدرس مسیر جاری را نشان می دهد.print(os.getcwd())

&#039;/home/milad&#039;os.chdir()برای تغییر مسیر از این متد استفاده می شود.path = &#039;/home/milad/Documents&#039;
os.chdir(path)
print(os.getcwd())

&#039;/home/milad/Documents&#039;در مثال بالا در خط اول آدرس محلی که قرار است برویم را در متغییر path ذخیره کرده ایم، در خط دوم مسیر را تغییر می دهیم و در خط سوم مسیر فعلی را چاپ می کنیم.برای رفتن به دایرکتوری قبلی نیاز به نوشتن آدرس کامل آن نیست و می توان به یکی از دو روش زیر عمل نمود:os.chdir(&#039;../&#039;)

os.chdir(os.pardir)فقط ذکر این نکته را لازم می دانم که به ازای هر بار نوشتن /.. هر دفعه یک دایرکتوری عقب رفته مثلا /../.. باعث شده دو دایرکتوری به عقب برگشته.os.listdir()این متد لیستی از محتویات دایرکتوری را نشان می دهد. در زمان استفاده از این متد اگر آرگومان این متد (منظور از آرگومان  آدرس دایرکتوری مورد نظر برای نشان دادن محتویات می باشد) ذکر نشود محتویات دایرکتوری فعلی را نشان می دهد. همچنین این متد محتویات زیر دایرکتوری ها را نشان نمی دهد که برای دیدن محتویات زیر دایرکتوری ها باید از متد walk استفاده نمود که در ادامه به بررسی متد walk خواهم پرداخت.path = &#039;/home/milad/Downloads&#039;
os.listdir(path)

[&#039;index.jpg&#039;, &#039;sadegi.mp3&#039;, &#039;pictures&#039;]همانطور که گفتم در صورت ذکر نکردن آرگومان محتویات دایرکتوری فعلی که هستیم را نشان می دهد. همچنین شما می توانید با استفاده از هر یک از روش های زیر باز هم محتویات دایرکتوری فعلی را ببینید:os.listdir()

os.listdir(os.getcwd())

os.listdir(os.curdir)

os.listdir(&#039;.&#039;)شما می توانید این متد را با حلقه هم استفاده کنید به صورت زیر:for items in os.listdir():
     print(items)
     
 index.jpg
 sadegi.mp3
 picturesبرای دیدن محتویات دایرکتوری های قبلی نیاز به نوشتن آدرس کامل نیست و می توان از &#x27;/..&#x27; یا os.pardir به عنوان آرگومان این متد استفاده نمود.os.walk()این متد محتویات دایرکتوری مشخص شده و زیر دایرکتوری های آن را نشان می دهد. این متد یک Generator هستش که یک تاپل را yield می کند با سه مقدار dirpath, dirnames, filenames که به صورت زیر استفاده می شود:for dirpath, dirnames, filenames in os.walk(path):
    print(dirpath, &#039;, &#039;, dirnames, &#039;, &#039;, filenames)
     
     
/home/milad/stream ,  [&#039;music&#039;, &#039;pictures&#039;] ,  []
/home/milad/stream/music ,  [] ,  [&#039;240.mp3&#039;, &#039;94695757.mp3&#039;, &#039;244.mp3&#039;]
/home/milad/stream/pictures ,  [] ,  [&#039;cows.jpg&#039;, &#039;ISLAND.JPG&#039;, &#039;farm.jpg&#039;]در کد بالا dirpath که از نوع رشته می باشد مربوط به مسیر جاری که محتویان آن در حال نشان دادن می باشد بوده، dirnames که از نوع لیست می باشد مربوط به زیر دایرکتوری های می باشد که آن ها را در هر دایرکتوری نشان میده و filenames هم مربوط به نام فایل های موجود در هر دایرکتوری می باشد.نکته : شما می توانید به جای dirpath, dirnames, filenames هر نام دیگری که میخواهید انتخاب کنید.منتظر ادامه این آموزش باشید. </description>
                <category>میلادقاسمی</category>
                <author>میلادقاسمی</author>
                <pubDate>Sun, 07 Apr 2019 02:07:30 +0430</pubDate>
            </item>
                    <item>
                <title>چگونه زبان برنامه نویسی انتخاب کنیم</title>
                <link>https://virgool.io/justforfun/%DA%86%DA%AF%D9%88%D9%86%D9%87-%D8%B2%D8%A8%D8%A7%D9%86-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D9%86%D8%AA%D8%AE%D8%A7%D8%A8-%DA%A9%D9%86%DB%8C%D9%85-qhbxrs2d91yp</link>
                <description>مکالمه اولکدام زبان بهترین زبان برنامه نویسی هست؟نفر اول : زبان سی پلاس پلاس بهترین هست ، این دیگه پرسیدن نداره :))نفر دوم : فقط پایتون ! سختی زبان های دیگر رو نداره و یادگیریش آسونه !مکالمه دومبین زبان های برنامه نویسی سی پلاس پلاس و پایتون ، کدام بهتر است؟نفر اول : معلومه سی پلاس پلاس ، خدای زبان های برنامه نویسی هستش . تمام !!!نفر دوم : معلومه پایتون نسبت به سی پلاس پلاس آسون تره و یادگیریش راحت تر !!این دو مکالمه یکی از رایج ترین مکالمات در بین کسانی هستند که میخواهند برنامه نویسی را شروع کنند (و شاید هم در بین افراد متوسط هم دیده شود) که در گروه های مختلف تلگرامی ، فروم ها و بین افراد در محیط های مختلف رخ میدهد. بیایید یکم در مورد این دو سوال دقیق تر بشویم.پ.ن مکالمه اول : اگر یک زبان برنامه نویسی بهترین بود دیگه دلیلی نداشت این همه زبان به وجود  آید و یا زبان های به وجود آمده این همه طرفدار یا جامعه کاربری داشته باشند و هر روز توسعه پیدا کنند. پس این نشان می دهد هیچ زبانی بهترین زبان نیست.پ.ن مکالمه دوم : این سوال مثل این هست که بپرسیم  مداد بهتر است یا خودکار ؟! (واقعا کدام بهتر هست؟! )در جایی که قرار است طراحی ای انجام شود مداد بهتر است ، زیرا قابلیت پاک شدن را دارد و هم چنین طیف رنگ بیشتری را دارا می باشد یا مثلا دانش آموزان ابتدایی که در ابتدای یادگیری هستند نیاز دارند اشتباهات خود را پاک کنند، اما وقتی شما به عنوان یک خبرنگار در حال نوشتن خبری هستید و یا به عنوان یک دانشجو در حال نوشتن جزوه هستید ، از خودکار استفاده میکنید. چرا؟! چون خودکار مانند مداد نیاز به تراشیدن ندارد یا نوک آن نمی شکند (وقت شما را بابت تراشیدن تلف نمی کند تا خبر و جمله ای را از دست بدهید) این نشان میدهد که مداد و خودکار با اینکه یک کار را انجام می دهند (نوشتن!)، اما نقاط مثبت و منفی آن ها باعث ایجاد تمایز در استفاده می شود. مکالمه دوم هم از این مثال گفته شده مبرا  نیست زیرا هر زبان دارای نقاط مثبت و منفی ای هست که باعث تمایز آن می شود .و اما چگونه میتوانیم یک زبان مناسب را انتخاب کنیم ؟!- در اولین گام باید بیاییم حوزه یا حوزه های مورد علاقه خود را انتخاب کنیم (این انتخاب می تونه بر اساس علاقه، بازار کار، توانایی خود فرد و خیلی از پارامترهای دیگر در یکی از سمت های وب ، موبایل ، هوش مصنوعی و ... باشد )- در دومین گام جست و جو می کنیم که حوزه یا حوزه های کاری ما نیاز به چه مهارت هایی دارند. یکی از این مهارت ها برنامه نویسی میباشد . پس ابتدا میاییم میبینیم در این حوزه چه زبان هایی استفاده می شوند و بنا به نیاز خودمان و قابلیت های آن زبان ها ، میاییم  زبان یا زبان های مناسب مان را انتخاب میکنیم.بزارید یک مثال بزنم : من مثلا پس از تحقیق متوجه میشم به یادگیری ماشین علاقه دارم و میام در موردش تحقیق میکنم که نیاز به ریاضی، زبان برنامه نویسی ، الگوریتم و ... دارد. در مرحله بعد میبینم زبان های جاوا، پایتون، سی پلاس پلاس می توانند در این زمینه استفاده شوند( از ذکر بقیه زبان ها برای جلوگیری از طولانی شدن خودداری کردم)‌. حالا میام در مورد نقاط مثبت و منفی هر زبان تحقیق میکنم و با توجه به نیاز خودم یک یا چند زبان انتخاب میکنم. مثلا من نیاز دارم که سریع بتونم ایده ام را عملی کنم و خود را درگیر کد نویسی های طولانی و سخت نکنم ، پس میام زبان پایتون را انتخاب میکنم یا طولانی نوشتن کد برایم مهم نیست و در عوض سرعت اجرای بالا برای من ملاک هست ، پس میام سی پلاس پلاس را انتخاب میکنم یا اگر سریع نوشتن کد و سرعت اجرای بالا  برای من مهم است ، میام پایتون و سی پلاس پلاس را در کنار هم و به صورت ترکیبی استفاده میکنم( شما میتوانید در داخل کد پایتون از سی پلاس پلاس هم استفاده کنید جهت استفاده در کد کمتر و سرعت بالاتر و بلعکس! پایتون و سی پلاس پلاس صرفا مثالی به جهت تفهمیم بهتر بود)انتخاب زبان ملاک های زیادی دارد و فقط سرعت اجرا یا نوشتن کد کم تر ملاک نیست و باید به جامعه کاربری اون زبان، کتابخانه های موجود برای  آن زبان در حوزه مورد نظر، سیستم عاملی که میخواهید در آن کار کنیم (بنظر من این مورد زیاد مهم نیست چون شما قادرید بیشتر زبان هارا در سیستم عامل های مختلف استفاده کنید ) و پارامترهای دیگر توجه کنید و در آخر این نکته رو بگویم زبان برنامه نویسی یک ابزار هست ، پس در انتخاب آن دقت کنید اما وسواس نداشته باشید.خوشحال میشم اگه موردی هست که در انتخاب زبان می تونه به افراد کمک کنه رو در قسمت نظرات بگید تا به متن اضافه بکنم.</description>
                <category>میلادقاسمی</category>
                <author>میلادقاسمی</author>
                <pubDate>Sat, 08 Dec 2018 21:03:01 +0330</pubDate>
            </item>
            </channel>
</rss>