Download as pdf or txt
Download as pdf or txt
You are on page 1of 15

‫آموزش ماژول ‪os‬‬

‫نویسنده ‪ :‬ملدا قاسمی‬


‫شماره ‪۱ :‬‬
‫سطح ‪ :‬مبتدی‬
‫نسخه پایتون مورا استفااه ‪3,6.5:‬‬

‫نظرات و پلشنهااات خوا را به ایملل زیر ارسال کنلد‬


‫‪workstation@chmail.ir‬‬
‫این آموزش ار حال بروز رسانی می باشد پس منتظر نسخه های‬
‫بعدی باشلد‬

‫‪@PythonForever‬‬
‫)(‪os.uname‬‬
‫اطدعات مشخصات سلستم عامل را نشان می اهد‪) .‬خروجی این متد ار پایتون ‪ 2‬و ‪ 3‬اندکی متفاوت‬
‫می باشد(‪ .‬خروجی این استور ار پایتون ‪ ۳‬به حر زیر می باشد‬
‫‪ : sysname‬نام سلستم عامل‬
‫‪ : nodename‬نام هاست ماشی‬
‫‪ : release‬نسخه هسته مورا استفااه‬
‫‪: machine‬معماری سلستم‬
‫‪ : version‬نسخه سلستم عامل‬

‫)(‪> os.uname‬‬

‫‪posix.uname_result(sysname='Linux', nodename='ubuntu', release='4.15.0-‬‬


‫‪20-generic', version='#21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018',‬‬
‫)'‪machine='x86_64‬‬

‫می خواهلد ملد نام سلستم عامل نشان اهلد به صورت زیر نوشته‬ ‫نکته ‪ -‬اهه قط‬
‫]‪> os.uname()[0‬‬

‫'‪'Linux‬‬

‫)(‪os.getuid‬‬
‫یوزر آیدی پروسه قعلی را نشان می اهد‬
‫)(‪> os.getuid‬‬

‫‪999‬‬

‫)(‪os.getgid‬‬
‫شماره هروه پروسه قعلی را نشان می اهد‬

‫)(‪> os.getgid‬‬

‫‪999‬‬

‫‪@PythonForever‬‬
‫)(‪os.getpid‬‬
‫آیدی پروسه قعلی را نشان می اهد‬
‫)(‪> os.getpid‬‬

‫‪3571‬‬

‫)(‪os.getlogin‬‬
‫نام کاربری که اهی کراه است را نشان می اهد‬
‫)(‪> os.getlogin‬‬

‫‪ubuntu‬‬

‫)(‪os.getcwd‬‬
‫مس جاری را نشان می اهد‬
‫)(‪> os.getcwd‬‬

‫'‪'/home/ubuntu‬‬

‫)(‪os.chdir‬‬
‫استفااه می شوا‬ ‫برای تغیل مس‬
‫'‪> path = '/home/ubuntu/test_land‬‬
‫)‪> os.chdir(path‬‬
‫)(‪> os.getcwd‬‬

‫'‪'/home/ubuntu/test_land‬‬

‫را‬ ‫اوم مس‬ ‫ار خ اول اارس محلی که قرار است برویم را ار یی متیل ذخ ه کراه ایم‪ .‬ار خ‬
‫تغیل می اهلم و ار خ سوم مس قعلی را چاپ می کنلم‬
‫نکته ‪ :‬اهه خواستلم به اایرکتوری پدر یا اایرکتوری قبلی برهرایم نلاز به نوش آارس کامل نداریم و‬
‫می تغوانلم بنویسلم‬

‫)'‪> os.chdir('../‬‬ ‫‪@PythonForever‬‬


‫)(‪> os.getcwd‬‬

‫'‪'/home/ubuntu‬‬

‫تغوجه‪ :‬به ازای هر‪ ../‬یی اایرکتوری عطب رقته‬


‫همانطور که مشاهده کراید بدون نوش آارس کامل به اایرکتوری قبلی رقتلم همچنی می تغوان نوشت‬

‫)‪> os.chdir(os.pardir‬‬

‫)(‪os.listdir‬‬
‫برای مشاهده محتویات اایرکتوری قعلی یا اایرکتوری مشخص شده می باشد‬

‫)(‪> os.listdir‬‬

‫]'‪['tester', 'rm.txt', 'ls.txt‬‬

‫خروجی این استور یلس از محتویات اایرکتوری قعلی می باشد‪ .‬تغوجه کنلد ار صورتغی که به این‬
‫تغابع پارامیی پاس اااه نشوا محتویات اایرکتوری قعلی را نشان می اهد‬
‫می تغوان این تغابع را با حلطه هم نی نوشت‬

‫‪> for items in os.listdir():‬‬


‫…‬ ‫)‪print(items‬‬

‫‪tester‬‬
‫‪rm.txt‬‬
‫‪ls.txt‬‬

‫همچنی برای نشان ااان محتویات اایرکتوری قعلی نی می تغوان از روش های زیر هم استفااه کرا‬

‫))(‪> os.listdir(os.getcwd‬‬
‫یا‬
‫)‪> os.listdir(os.curdir‬‬
‫یا‬
‫)'‪> os.listdir('.‬‬
‫‪@PythonForever‬‬
‫اهر ملخواهلد محتویات اایرکتوری قبلی نشان اااه شوا می تغوان نوشت‬
‫)'‪> os.listdir('../‬‬
‫یا‬
‫)‪> os.listdir(os.pardir‬‬

‫به ازای هر ‪ ../‬هر اقعه یی اایرکتوری عطب رقته‬


‫ار صورتغی که بخواهلد محتویات اایرکتور ایگری را مشاهده کنلد کاقلست آارس آن را بنویسلد‬

‫)'‪> os.listdir('/usr‬‬
‫]'‪['bin', 'games', 'include', 'lib', 'local', 'sbin', 'share', 'src‬‬

‫تغابع باا قط محتویات اایرکتوری مشخص شده را نشان اااه و کاری با محتویات اایرکتوری های‬
‫ااخل اایرکتوری مشخص شده ندارا‪ .‬اهر می خواهلد محتویات زیر اایرکتوری ها هم نشان اااه شوند‬
‫باید از متد زیر استفااه کنلد‬

‫)(‪os.walk‬‬
‫برای نشان ااان محتویات اایرکتوری قعلی یا اایرکتوری مشخص شده به همراه محتویات زیر‬
‫اایرکتوری ها می باشد‬
‫این تغابع یی ‪ generator‬می باشد که یی تغاپل را ‪ yield‬می کند با سه مطدار‬
‫‪dirpath, dirnames, flenames‬‬

‫'‪> path = ‘/home/ubuntu/test_land‬‬


‫‪> for dirpath, dirnames, flenames in os.walk(path):‬‬
‫‪...‬‬ ‫)‪print(dirpath, ' , ', dirnames, ' , ', flenames‬‬

‫]'‪/home/ubuntu/test , ['picture'] , ['ls.txt‬‬


‫]'‪/home/ubuntu/test/picture , [] , ['Front.jpg', 'Back.jpg‬‬

‫)(‪os.mkdir‬‬
‫برای ساخت پوشه استفااه می شوا‬
‫)'‪> os.mkdir('pictures‬‬ ‫‪@PythonForever‬‬
‫اهر پوشه از قبل موجوا باشد استلنا ‪ FileExistError‬می اهد‬
‫همچنی می تغوان از اارس اهی هم استفااه کرا‬
‫)'‪> os.mkdir(‘/home/ubuntu/pictures‬‬

‫)(‪os.makedirs‬‬
‫برای ساخت پوشه های تغو ار تغو می باشد‬
‫)'‪> os.makdir(‘1/2/3‬‬
‫ار کد باا پوشه ‪ ۳‬را ار ارون پوشه ‪ ۲‬و پوشه ‪ ۲‬را ار ارون پوشه ‪ ، ۱‬ار اایرکتوری جاری می سازا‬
‫ار صورتغی که قصد ااشه باشلد پوشه های تغو ار تغو بسازید ار صورتغی که این پوشه ها از قبل موجوا‬
‫باشد یی استلنا رخ می اهد‬

‫)'‪> os.makdir(‘1/2/3‬‬

‫‪Traceback (most recent call last):‬‬


‫>‪File "<stdin>", line 1, in <module‬‬
‫‪File "/usr/lib/python3.6/os.py", line 220, in makedirs‬‬
‫)‪mkdir(name, mode‬‬
‫'‪FileExistsError: [Errno 17] File exists: '1/2/3‬‬

‫اهر می خواهلد این استلنا نشان اااه نشوا نوشته‬


‫)‪> os.makedirs('1/2/3', exist_ok=True‬‬

‫)‪os.access(path, mode‬‬
‫برای برر موجوا بوان قایل و اایرکتوری و هم چنی مزوز اسی می باشد که اارای مد های زیر‬
‫می باشد‬
‫‪ : F_OK‬برای برر موجوا بوان قایل و اایرکتوری می باشد‬
‫‪ : R_OK‬برای برر مزوز خواندن می باشد‬
‫‪ : X_OK‬برای برر مزوز اجرا می باشد‬
‫‪ : W_OK‬برای برر مزوز نوش می باشد‬
‫ار صورتغی که هر قایل یا اایرکتوری اارای آن مزوز باشد یا موجوا باشد مطدار ‪ True‬را برملگرااند‬

‫)‪> os.access('ls.txt', os.F_OK‬‬

‫‪True‬‬ ‫‪@PythonForever‬‬
‫)‪> os.access('ls.txt', os.R_OK‬‬

‫‪True‬‬

‫)‪> os.access('ls.txt', os.W_OK‬‬

‫‪True‬‬

‫)‪> os.access('ls.txt', os.X_OK‬‬

‫‪False‬‬

‫)(‪os.environ‬‬
‫متیل های محلطی را نشان می اهدکه این متیل ها ار هر سلستم عامل برای اهداف خاص خوا‬
‫سلستم یا برنامه های جان تغعریف و مطدار اهی شده اند این تغابع به عنوان‬
‫‪ Mapping object‬شناخته ملشوا که یی ایکشیی را بر می هرااند که ملد می تغوان نوشت‬

‫)'‪> os.environ.get(‘HOME‬‬

‫'‪'/home/ubuntu‬‬

‫از آنزایی که هفته شد ایکشیی را بر ملگرااند پس می تغوان از ویژهی کللد و مطدار ایکشیی هم‬
‫استفااه نموا‬

‫)(‪> os.environ.keys‬‬
‫)(‪> os.environ.values‬‬

‫ها باید نوشت‬ ‫برای مشاهده تغمامی متیل‬


‫)(‪> os.environ‬‬

‫نشان اااه شوا کاقلست نوشت‬ ‫مطدار یی متیل‬ ‫اهر می خواهلد قط‬
‫]' ‪> os.environ['HOME‬‬
‫]'‪> os.environ['PWD‬‬

‫'‪'/home/ubuntu‬‬
‫‪@PythonForever‬‬
‫خروجی هر او استور یکی می باشد‬

‫]'‪> os.environ['SHELL‬‬

‫'‪'/bin/bash‬‬

‫]'‪> os.environ['TERM‬‬

‫'‪'xterm-256color‬‬
‫اهر متیل ی وجوا نداشته باشه این تغابع ارور می اهد‬

‫و مطدار اهی ان را اموزش خواهم ااا‬ ‫ار نسخه های بعدی این اموزش نحوه ساخت متیل‬

‫)(‪os.getenv‬‬
‫مانند ‪ environ‬است با این تغفاوت که اهر متیل ی وجوا نداشت ‪ none‬را بر ملگرااند‬

‫)(‪> os.getenv‬‬

‫)(‪os.rename‬‬
‫برای تغیل نام قایل و اایرکتوری می باشد‪ .‬ابتدا نام قایل یا اایرکتوری که قرار است اسمش عوض‬
‫بشوا را نوشته و سپس نام جدید ان نوشته شوا‬

‫)'‪> os.rename('pic', 'picture‬‬

‫ار اینزا نام پوشه ‪ pic‬به ‪ picture‬تغیل اااه می شوا‬


‫تغوجه ‪ :‬می تغوانلد با استفااه از نوش مس قایل ها و اایرکتوری های خارج از اایرکتوری قعلی را‬
‫نی تغیل نام ااا‬

‫)'‪> os.rename('/home/ubuntu/test_land/ls.txt', 'man_ls.txt‬‬

‫)(‪os.path.exist‬‬
‫برر می کند که آیا قایل یا اایرکتوری موجوا می باشد‬
‫‪@PythonForever‬‬
> os.path.exists('/home/ubuntu/test/ls.txt')

True

> os.path.exists('/home/ubuntu/test/back.jpg')

False

os.path.getsize()
‫سایز قایل و اایرکتوری را به بایت نشان می اهد‬

> os.path.getsize('vid.ogv')

10666978

os.path.isfle()
‫ را بر می هرااند‬True ‫اهر قایل باشد‬

> os.path.isfle('vid.ogv')

True

os.path.isfle('pictures_dir')

False

‫ هم اینکار را انزام بدهلد به صورت زیر‬pathlib ‫ می تغوان با استفااه از ماژول‬: ‫نکته‬

> import pathlib


> check = pathlib.Path('ls.txt')
> if check.is_fle():
... print("It is a fle")

It is a fle @PythonForever
os.path.isdir()
‫ را بر می هرااند‬True ‫اهر اایرکتوری باشد‬

> os.path.isdir('vid.ogv')

False

os.path.isdir('pictures_dir')

True

‫ هم اینکار را انزام بدهلد به صورت زیر‬pathlib ‫ می تغوان با استفااه از ماژول‬: ‫نکته‬

> import pathlib


> check = pathlib.Path('picture')
> if check.is_dir():
... print("It is a directory")

It is a directory

os.path.dirname()
‫اهر مس اااه شده به قایل ختم شوا اارس اایرکتوری های قبل از قایل را بر می هرااند و اهر مس‬
‫اااه شده کد اایرکتوری باشد اارس اایرکتوری های قبل از اخرین اایرکتوری را نشان می اهد‬

> os.path.dirname('/home/ubuntu/test/picture/ls.txt')

'/home/ubuntu/test/picture'

> dir_path = os.path.dirname('/home/ubuntu/test/picture')


> print(dir_path)

'/home/ubuntu/test'

@PythonForever
os.path.split()
‫)که اایرکتوری یا قایل است( را از بطله جدا می کند‬ ‫ار مس اااه شده آخرین مس‬

> (fle_path, fle_name)= os.path.split('/home/ubuntu/test/picture/ls.txt')


> print(fle_path, ' - ', fle_name)

/home/ubuntu/test/picture - ls.txt

> (dir_path, dir_name) = os.path.split('/home/ubuntu/test/picture')


> print(dir_path, ' - ', dir_name)

/home/ubuntu/test - picture

‫اایرکتوری را‬/‫اایرکتوری و نام قایل‬/‫های مربوط به اارس قایل‬ ‫متیل‬ ‫ می تغوان پران‬: ‫نکته‬
‫نگذاشت‬

> fle_name = os.path.split('/home/ubuntu/test/picture/ls.txt')[1]


> print(fle_name)

ls.txt
‫به اارس‬ ‫پلدا کرا برای اسی‬ ‫قایل اسی‬/‫ار ملال باا می تغوان مستطلما به نام اایرکتوری‬
‫ نوشت صفر‬1 ‫اایرکتوی هم ملتوان به جای‬/‫قایل‬

os.path.join()
‫او یا چند مس را هوشمندانه به هم می چسباند‬

> path = os.path.join( os.environ['HOME'], 'test', 'picture')


> print(path)

/home/ubuntu/test/picture

@PythonForever os.path.abspath('.')
paren ‫برای نشان ااان آارس کامل جایی که هستلم می باشد وهمچنی برای نشان ااان اایرکتوی‬

> os.path.abspath('.')

'/home/ubuntu/test'

> path = '/home/ubuntu/test/picture'


> par_path = os.path.abspath(os.path.join(path, os.pardir))
> print(par_path)

/home/ubuntu/test

‫همچنی اهر نلاز ااشتلم تغا آارس کامل یی قایل یا اایرکتوری را ااشته باشلم تغا ار جاهای ایگر‬
‫استفااه بکنلم می تغوانلم بنویسلم‬

> os.path.abspath('ls.txt')

'/home/ubuntu/test/ls.txt'

os.path.basename()
‫اااه شده را بر می‬ ‫قایل ار مس‬/‫ اارس اخرین اایرکتوی‬، ‫زمانی که به این تغابع آارس اااه شوا‬
‫هرااند‬

> path = '/home/ubuntu/test/picture'


> dir_name = os.path.basename(path)
> print(dir_name)

'picture'

> fle_name = os.path.basename(os.getcwd() + '/ls.txt')


> print(fle_name)

ls.txt

@PythonForever os.path.splitext()
‫اهر نام یی قایل را به این تغابع بدهلم نام قایل و قرمت آن را از هم جدا می کند‬

‫)'‪> os.path.splitext('ls.txt‬‬

‫)'‪('ls', '.txt‬‬

‫ااشت به صورت زیر‬ ‫همچنی می تغوان مستطلما به نام قایل یا قرمت آن قایل اسی‬

‫]‪> os.path.splitext('ls.txt')[1‬‬

‫'‪'.txt‬‬

‫ملال بلشی‬

‫'‪> path = '/home/ubuntu/test/ls.txt‬‬


‫)‪> os.path.splitext(path‬‬

‫)'‪('/home/ubuntu/test/ls', '.txt‬‬

‫همان طور که ار آخرین ملال مشاهده می کنلد ار صورتغی که آارس کامل را بدهلد این تغابع کل اارس‬
‫و قرمت قایل را از هم جدا می کند‪ ،‬برای جلوه ی از این کار می تغوانلد بنویسلد‬

‫))‪> os.path.splitext( os.path.basename(path‬‬

‫)'‪('ls', '.txt‬‬

‫))‪> fle_name, fle_format = os.path.splitext( os.path.basename(path‬‬


‫)‪> print(fle_name, ' - ', fle_format‬‬

‫‪ls - .txt‬‬

‫)(‪os.stat‬‬
‫اطدعاتغی ار رابطه با قایل و اایرکتوری می اهد که به حر زیر می باشد‬
‫‪protection bits : st_mode‬‬
‫‪inode number : st_ino‬‬
‫‪@PythonForever‬‬ ‫‪device : st_dev‬‬
‫‪ : st_nlink‬تغعداا هارا یلنی‬
‫‪ : st_uid‬یوزر آیدی مایی قایل یا اایرکتوری‬
‫‪ : st_gid‬شماره هروه مایی قایل یا اایرکتوری‬
‫‪ : st_size‬سایز به بایت نشان اااه‬
‫‪ : st_atime‬آخرین زمان اسی‬
‫‪ : st_mtime‬آخرین زمان استکاری‬
‫‪ : st_ctime‬آخرین زمان تغیل متاایتا‬

‫)'‪> os.stat('ls.txt‬‬

‫‪os.stat_result(st_mode=33188, st_ino=840, st_dev=26, st_nlink=1,‬‬


‫‪st_uid=999, st_gid=999, st_size=7962, st_atime=1551552566,‬‬
‫)‪st_mtime=1551552566, st_ctime=1551552566‬‬

‫را می خواهلد کاقلست مانند زیر عمل کنلد‬ ‫مشخه خا‬ ‫اهر قط‬
‫‪> os.stat('ls.txt').st_size‬‬

‫‪7962‬‬

‫)(‪os.path.getmtime‬‬
‫اخرین زمان استکاری قایل و اایرکتوری را نشام می اهد‬

‫)'‪> os.path.getmtime('ls.txt‬‬

‫‪1551552566.179236‬‬

‫زمان نشان اااه شده خوانا نبواه پس برای خوانا کران می تغوان نوشت‬

‫‪> from datetime import datetime‬‬


‫))'‪> mod_time = datetime.fromtimestamp(os.path.getmtime('ls.txt‬‬
‫)‪> print(mod_time‬‬

‫‪2019-03-02 18:49:26.179236‬‬

‫)(‪os.system‬‬
‫می تغوان استورات تغرملنال را با استفااه از این تغابع اجرا نموا‬
‫‪@PythonForever‬‬
‫)'‪> os.system('ls -a‬‬

‫‪. .. ls.txt picture‬‬


‫‪0‬‬

‫املدوارم تغا به اینزا این آموزش مفلد واقع شده باشد منتظر نسخه بعدی این اموزش باشلد‬
‫با تغشکر ‪ -‬ملداقاسمی‬

‫‪@PythonForever‬‬

You might also like