Organizing files in python

در این پست و پست های دیگر قراره آموزش سازماندهی فایل ها و دایرکتوری ها در پایتون را آموزش بدم مثل ایجاد پوشه ، کپی کردن فایل ها، به درست آوردن مشخصات سیستم عامل و ... . در این آموزش از ماژول های os, shutil, glob, pathlib, send2trash,subprocess و چندتا ماژول دیگه استفاده می کنم و اینکه من از نسخه ۳.۷.۲ پایتون استفاده می کنم .

در تمامی کدهای اجرا شده خط یا خطوط آخر، نمونه خروجی تولید شده توسط کد می باشد که بعد از یک خط خالی نوشته شده است تا خوانندگان عزیز نمونه خروجی هر کد را ببینند.

os.uname()

اطلاعات مشخصات سیستم عامل را نشان می دهد (خروجی این متد در پایتون ۲ و ۳ اندکی متفاوت می باشد). خروجی این دستور در پایتون ۳ به شرح زیر می باشد:

sysname : نام سیستم عامل را نشان می دهد

nodename : نام هاست ماشین را نشان می دهد

release : نسخه هسته را نشان می دهد

version : نسخه سیستم عامل را نشان می دهد

machine : معماری سیستم را نشان می دهد

print(os.uname())

posix.uname_result(sysname='Linux', nodename='pc', release='4.15.0-46-generic', version='#49-Ubuntu SMP Wed Feb 6 09:33:07 UTC 2019', machine='x86_64')

اگر می خواهید مثلا فقط نام سیستم عامل نشان داده بشود باید نوشت:

print(os.uname()[0])

'Linux'


os.getuid()

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

print(os.getuid())

۱۳۲۷


os.getgid()

آی دی گروه پروسه فعلی را نشان می دهد.

print(os.getgid())

۱۳۲۷


os.getpid()

آی دی پروسه فعلی را نشان می دهد.

print(os.getpid())

۱۸۸۳۵


os.getlogin()

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

print(os.getlogin())

'milad'


os.getcwd()

آدرس مسیر جاری را نشان می دهد.

print(os.getcwd())

'/home/milad'


os.chdir()

برای تغییر مسیر از این متد استفاده می شود.

path = '/home/milad/Documents'
os.chdir(path)
print(os.getcwd())

'/home/milad/Documents'

در مثال بالا در خط اول آدرس محلی که قرار است برویم را در متغییر path ذخیره کرده ایم، در خط دوم مسیر را تغییر می دهیم و در خط سوم مسیر فعلی را چاپ می کنیم.

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

os.chdir('../')

os.chdir(os.pardir)

فقط ذکر این نکته را لازم می دانم که به ازای هر بار نوشتن /.. هر دفعه یک دایرکتوری عقب رفته مثلا /../.. باعث شده دو دایرکتوری به عقب برگشته.


os.listdir()

این متد لیستی از محتویات دایرکتوری را نشان می دهد. در زمان استفاده از این متد اگر آرگومان این متد (منظور از آرگومان  آدرس دایرکتوری مورد نظر برای نشان دادن محتویات می باشد) ذکر نشود محتویات دایرکتوری فعلی را نشان می دهد. همچنین این متد محتویات زیر دایرکتوری ها را نشان نمی دهد که برای دیدن محتویات زیر دایرکتوری ها باید از متد walk استفاده نمود که در ادامه به بررسی متد walk خواهم پرداخت.

path = '/home/milad/Downloads'
os.listdir(path)

['index.jpg', 'sadegi.mp3', 'pictures']

همانطور که گفتم در صورت ذکر نکردن آرگومان محتویات دایرکتوری فعلی که هستیم را نشان می دهد. همچنین شما می توانید با استفاده از هر یک از روش های زیر باز هم محتویات دایرکتوری فعلی را ببینید:

os.listdir()

os.listdir(os.getcwd())

os.listdir(os.curdir)

os.listdir('.')

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

for items in os.listdir():
     print(items)
     
 index.jpg
 sadegi.mp3
 pictures

برای دیدن محتویات دایرکتوری های قبلی نیاز به نوشتن آدرس کامل نیست و می توان از '/..' یا os.pardir به عنوان آرگومان این متد استفاده نمود.


os.walk()

این متد محتویات دایرکتوری مشخص شده و زیر دایرکتوری های آن را نشان می دهد. این متد یک Generator هستش که یک تاپل را yield می کند با سه مقدار dirpath, dirnames, filenames که به صورت زیر استفاده می شود:

for dirpath, dirnames, filenames in os.walk(path):
    print(dirpath, ', ', dirnames, ', ', filenames)
     
     
/home/milad/stream ,  ['music', 'pictures'] ,  []
/home/milad/stream/music ,  [] ,  ['240.mp3', '94695757.mp3', '244.mp3']
/home/milad/stream/pictures ,  [] ,  ['cows.jpg', 'ISLAND.JPG', 'farm.jpg']

در کد بالا dirpath که از نوع رشته می باشد مربوط به مسیر جاری که محتویان آن در حال نشان دادن می باشد بوده، dirnames که از نوع لیست می باشد مربوط به زیر دایرکتوری های می باشد که آن ها را در هر دایرکتوری نشان میده و filenames هم مربوط به نام فایل های موجود در هر دایرکتوری می باشد.

نکته : شما می توانید به جای dirpath, dirnames, filenames هر نام دیگری که میخواهید انتخاب کنید.

منتظر ادامه این آموزش باشید.