hody.ir

دوره صفر تا صد پایتون | جلسه ۳۷ | کار و آشنایی با کتابخانه os در پایتون

37-کار با کتابخانه os در پایتون

جلسه ۳۷ دوره صفر تا صد پایتون

در جلسه قبلی دوره صفر تا صد پایتون با روش استفاده از کتابخانه math و توابع و تغییرها آشنا شدیم. در این جلسه از دوره صفر تا صد پایتون با کتابخانه os کار می‌کنیم.

کتابخانه os چیست؟

کتابخانه os یک کتابخانه جز مجموعه کتابخانه استاندارد پایتون است. با استفاده از این کتابخانه میتوان با سیستم عامل ،‌ فایل ها و دایرکتوری ها در زبان برنامه نویسی پایتون کار کرد.

دقت کنید که برای کار با فایل ها به شکل راحت تر از کتابخانه shutil استفاده کنید.

برای کار با این کتابخانه ابتدا باید آن را به برنامه خود اضافه کنید :

import os

و بعد از آن میتوانید از توابع و متغییر های آن استفاده کنید.

در این مطلب فقط به توابع مهم اشاره می‌کنیم. لیست کامل توابع را در اینجا ببینید.

مقادیر و توابع کتابخانه os

name

این مقدار نشان دهنده سیستم عامل در حال اجرا است. این مقدار میتواند جزو این سه مقدار باشد:

posix: سیستم عامل های یونیکسی و شبه یونیکسی مثل اوبونتو یا MacOS

nt: سیستم عامل ویندوز یا سیستم عامل بر پایه آن مثل ReactOS یا Microsoft Windows 10 ( در جلسات قبلی دوره صفر تا صد پایتون با نصب پایتون در ویندوز آشنا شدیم)

java: سیستم عامل های جاوا که میتوانند پایتون اجرا کنند.

مثال ( دقت کنید که این مثال در مفسر پایتون که در جلسات قبلی دوره صفر تا صد پایتون با آن آشنا شدیم اجرا شده است ):

>>> import os
>>> os.name
'posix'

environ

این مقدار یک شی از نوع environ است که شبیه به دیکشنری ها است و شامل اطلاعاتی از سیستم عامل است.

مثال:

>>> os.environ
environ({'SHELL': '/bin/bash', 'SESSION_MANAGER': 'local/unix:@/tmp/.ICE-unix/1416,unix/unix:/tmp/.ICE-unix/1416', 'COLORTERM': 'truecolor', 'HISTCONTROL': 'ignoredups', 'XDG_MENU_PREFIX': 'gnome-', 'LOGNAME': 'alireza', 'XDG_SESSION_DESKTOP': 'gnome-xorg', 'XDG_SESSION_TYPE': 'x11', 'XAUTHORITY': '/run/user/1000/gdm/Xauthority', 'GJS_DEBUG_TOPICS': 'JS ERROR;JS LOG', 'WINDOWPATH': '2', 'GDM_LANG': 'en_US.UTF-8', 'HOME': '/home/alireza', 'USERNAME': 'alireza', 'LANG': 'en_US.UTF-8', 'MAIL': '/var/spool/mail/alireza', '_': '/usr/bin/python'})
>>> os.environ['SHELL']
'/bin/bash'
>>> os.environ['LOGNAME']
'alireza'
>>> os.environ['LANG']
'en_US.UTF-8'

getcwd

این تابع مسیری جایی که برنامه اجرا شده است را به خروجی برمی‌گرداند. مثل دستور pwd در ترمینال لینوکس.

مثال:

>>> os.getcwd()
'/home/alireza'
------------------
[alireza@fedora ~]$ pwd
/home/alireza

یعنی من برنامه مفسر پایتون را در دایرکتوری /home/alireza باز کرده ام.

chdir

با استفاده از این تابع میتوان آدرس اجرایی برنامه را تغییر داد. به عنوان مثال من در آدرس /home/alireza مفسر پایتون را باز کنم و با استفاده از این تابع به آدرس /etc بروم و لیست فایل ها را دریافت کنم فایل های /etc را می‌بینم. مثال:

>>> import os
>>> os.getcwd()
'/home/alireza'
>>> os.chdir('/etc')
>>> os.getcwd()
'/etc'

listdir

این تابع لیستی از فایل ها و دایرکتوری های داخل آدرس دایرکتوری ورودی به خروجی می‌دهد. اگر آدرس مشخص نشود از آدرس فعلی برنامه استفاده می‌شود. مثال:

>>> import os
>>> os.chdir('/home/alireza')
>>> os.getcwd()
'/home/alireza'
>>> os.listdir()
['Documents' , 'Music', 'Pictures', 'Connect.7z']
>>> os.listdir('/home/alireza')
['Documents' , 'Music', 'Pictures', 'Connect.7z']

دقت کنید که این تابع فایل های مخفی را نیز نشان می‌دهد.

mkdir

این تابع یک دایرکتوری با مقدار ورودی می‌سازد ( در جلسات قبلی دوره صفر تا صد پایتون با ورودی توابع آشنا شدیم ). در صورت موجود بودن دایرکتوری ،‌ارور FileExistsError رخ می‌دهد. مثال:

>>> import os
>>> os.chdir('/home/alireza/testing')
>>> os.getcwd()
'/home/alireza/testing'
>>> os.listdir()
[]
>>> os.mkdir('dir')
>>> os.listdir()
['dir']
>>> os.mkdir('dir')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileExistsError: [Errno 17] File exists: 'dir'

همچنین به شکل کامل هم می‌توان آدرس داد:

>>> os.mkdir('/home/alireza/testing/dir2')
>>> os.getcwd()
'/home/alireza/testing'
>>> os.listdir()
['dir2', 'dir']

درصورتی که یکی از دایرکتوری ها موجود نباشد ارور FIleNotFound رخ می دهد. مثال ( در مثال زیر دایرکتوری testing2 وجود ندارد ):

>>> os.mkdir('/home/alireza/testing2/dir2')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/home/alireza/testing2/dir2'

makedirs

این تابع ماننده تابع قبلی است. اما در صورت موجود نبودن دایرکتوری ها ارور نمی‌دهد و آنها را ایجاد می کند. مثال:

>>> os.mkdir('/home/alireza/testing2/dir2')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/home/alireza/testing2/dir2'
>>> os.makedirs('/home/alireza/testing2/dir2')

rmdir

این تابع دایرکتوری مشخص شده را حذف می‌کند. دقت کنید که در صورت خالی نبودن دایرکتوری ارور OSError رخ می‌دهد. مثال:

>>> os.rmdir('/home/alireza/testing2/dir2')
>>> os.listdir('/home/alireza/testing2/')
[]
>>> os.rmdir('/home/alireza/testing')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 39] Directory not empty: '/home/alireza/testing'
>>> os.listdir('/home/alireza/testing/')
['dir2', 'dir']

removedirs

این تابع ماننده تابع قبلی است اما عملگرد بازگشتی دارد یعنی تازمانی که اروری رخ ندهد دایرکتوری ها را یکی یکی پاک می‌کند. مثال:

>>> os.makedirs('/home/alireza/a/b/c/d/e/f/j')
>>> os.listdir('/home/alireza/a/b/c/d/e/f/j')
[]
>>> os.listdir('/home/alireza/a/b/c/d/e/f')
['j']
>>> os.listdir('/home/alireza/a')
['b']
>>> os.removedirs('/home/alireza/a/b/c/d/e/f/j')
>>> os.listdir('/home/alireza/a')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '/home/alireza/a'

همانطور که می‌بینید تمام دایرکتوری ها را تاجایی که خالی نبوده است پاک کرده است.

rename

این تابع دو ورودی دارد. کار این تابع این است که ورودی اول را به ورودی دوم تغییر دهد. دقت کنید که درصورتی که فایل از قبل موجود باشد ( یعنی به عنوان شما فایلی را به اسم note به فایلی به اسم notes.txt تغییر دهد اما این فایل وجود داشته باشد ) ارور OSError در سیستم عامل ویندوز رخ می‌دهد ( در جلسات قبلی دوره صفر تا صد پایتون با هندل کردن ارور ها آشنا شدیم ). اما در سیستم عامل های دیگر فایل قبلی حذف می‌شود و فایل جدید جای آن را می‌گیرد.

مثال:ر

>>> import os
>>> os.listdir()
['note', 'file.html']
>>> os.getcwd()
'/home/alireza/testing'
>>> os.rename('note','notes.txt')
>>> os.listdir()
['notes.txt', 'file.html']
>>> os.rename('/home/alireza/testing/file.html','page.html')
>>> os.listdir()
['notes.txt', 'page.html']

دقت کنید که در صورتی که آدرس مقدار دوم آدرسی دیگر باشد ،‌فایل/دایرکتوری به جای دیگر انتقال پیدا می‌کند. مثال؛

>>> import os
>>> os.chdir('/home/alireza/testing')
>>> os.listdir()
['notes.txt', 'page.html', 'dir2']
>>> os.rename('/home/alireza/testing/notes.txt','/home/alireza/testing/dir2/notes.txt')
>>> os.listdir()
['page.html', 'dir2']
>>> os.listdir('dir2')
['notes.txt']

renames

این تابع مثل تابع قبلی است اما درصورتی که آدرس دوم وجود نداشته باشد ،‌ آن را ایجاد می‌کند.

walk

این تابع از آدرس ورودی شروع به پیمایش می‌کند و هر دایرکتوری یا فایلی را که دریافت کند به شکل یک generator به خروجی می‌دهد و سپس داخل دایرکتوری های پیدا شده پیمایش می‌کند. مثل برنامه tree در ترمینال لینوکس:

.
├── dir2
│   └── notes.txt
└── page.html

مثال:

>>> tuple(os.walk('/home/alireza/testing'))
(('/home/alireza/testing', ['dir2'], ['page.html']), ('/home/alireza/testing/dir2', [], ['notes.txt']))

اولین مقدار محلی است که فایل ها را پیدا کرده ، دومین دایرکتوری هاست و سومی فایل ها.

مثال از استفاده از این تابع:

import os
for startdir, dirs, files in os.walk('/home/alireza/testing'):
    print('At',startdir)
    for dir in dirs:
        print(f'\t Found dir {dir}')
    for file in files:
        print(f'\t Found file {file}')

خروجی:

At /home/alireza/testing
         Found dir dir2
         Found file page.html
At /home/alireza/testing/dir2
         Found file notes.txt

system

این تابع کامند ورودی را در ترمینال اجرا می‌کند. مثال:

>>> os.system('tree')
.
├── dir2
│   └── notes.txt
└── page.html

1 directory, 2 files
0

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

5 1 vote
Article Rating
Subscribe
اطلاع از
guest
2 Comments
قدیمی ترین
جدیدترین بیشترین آرا
Inline Feedbacks
View all comments
trackback

[…] در جلسات قبلی دوره صفر تا صد پایتون با کتابخانه os و کتابخانه math از مجموعه کتابخانه استاندارد پایتون آشنا شدیم. در این جلسه با کتابخانه random در پایتون آشنا می‌شویم. […]

Amir mohammad Movahedi
Amir mohammad Movahedi
19 روز قبل

دستت طلا مرد
خیلی عالی بود 🙂