از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
مقدمه ای بر ماژول سیستم عامل پایتون
سرفصلهای مطلب
در این آموزش روش کار با پایتون را یاد خواهید گرفت os
مدول.
معرفی
پایتون یکی از پرکاربردترین زبانهای اخیر برای کارهای مختلف مانند پردازش دادهها، تجزیه و تحلیل دادهها و ساخت وبسایت است. در این process، وظایف مختلفی وجود دارد که به سیستم عامل وابسته هستند. پایتون به توسعهدهنده اجازه میدهد تا از چندین عملکرد وابسته به سیستمعامل با ماژول پایتون استفاده کند os
. این بسته ویژگی های پلتفرم را خلاصه می کند و ارائه می دهد python توابعی برای پیمایش، ایجاد، حذف و اصلاح فایلها و پوشهها. در این آموزش می توان انتظار داشت که یاد بگیرند که چگونه import این بسته، قابلیت های اساسی آن و یک نمونه پروژه در python که از این کتابخانه برای یک کار ادغام داده ها استفاده می کند.
برخی از توابع اساسی
بیایید ماژول را با چند کد مثال بررسی کنیم.
وارد کردن کتابخانه:
import os
بیایید لیستی از روش هایی که می توانیم با این ماژول استفاده کنیم را دریافت کنیم.
print(dir(os))
خروجی:
('DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH', 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'PathLike', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_execvpe', '_exists', '_exit', '_fspath', '_get_exports_list', '_putenv', '_unsetenv', '_wrap_close', 'abc', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'cpu_count', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode', 'fsencode', 'fspath', 'fstat', 'fsync', 'ftruncate', 'get_exec_path', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sep', 'set_handle_inheritable', 'set_inheritable', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 'stat', 'stat_float_times', 'stat_result', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'supports_fd', 'supports_follow_symlinks', 'symlink', 'sys', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'walk', 'write')
در حال حاضر، با استفاده از getcwd
روش، ما می توانیم مسیر دایرکتوری کاری فعلی را بازیابی کنیم.
print(os.getcwd())
خروجی:
C:\Users\hpandya\OneDrive\work\rasanegar\os_python\os_python\Project
لیست پوشه ها و فایل ها
بیایید پوشهها/فایلها را در فهرست فعلی فهرست کنیم listdir
:
print(os.listdir())
خروجی:
('Data', 'Population_Data', 'README.md', 'tutorial.py', 'tutorial_v2.py')
همانطور که می بینید، من 2 پوشه دارم: Data
و Population_Data
. من هم 3 تا فایل دارم: README.md
فایل markdown و دو فایل پایتون یعنی tutorial.py
و tutorial_v2.py
.
برای اینکه کل ساختار درختی پوشه پروژه من را بدست آوریم، اجازه دهید یک تابع بنویسیم و سپس استفاده کنیم os.walk()
برای تکرار روی تمام فایل های موجود در هر پوشه دایرکتوری فعلی.
def list_files(startpath):
for root, dirs, files in os.walk(startpath):
if dir!= '.git':
level = root.replace(startpath, '').count(os.sep)
indent = ' ' * 4 * (level)
print('{}{}/'.format(indent, os.path.basename(root)))
subindent = ' ' * 4 * (level + 1)
for f in files:
print('{}{}'.format(subindent, f))
این تابع را با استفاده از مسیر دایرکتوری کاری فعلی فراخوانی کنید، که قبلا روش انجام آن را دیدیم:
startpath = os.getcwd()
list_files(startpath)
خروجی:
Project/
README.md
tutorial.py
tutorial_v2.py
Data/
uscitiesv1.4.csv
Population_Data/
Alabama/
Alabama_population.csv
Alaska/
Alaska_population.csv
Arizona/
Arizona_population.csv
Arkansas/
Arkansas_population.csv
California/
California_population.csv
Colorado/
Colorado_population.csv
Connecticut/
Connecticut_population.csv
Delaware/
Delaware_population.csv
...
توجه: خروجی برای اختصار کوتاه شده است.
همانطور که از خروجی مشاهده می شود، نام پوشه ها با یک خاتمه می یابد /
و فایل های داخل پوشه ها با چهار فاصله در سمت راست فرورفته شده اند. این Data
پوشه دارای یک فایل CSV به نام است uscitiesv1.4.csv
. این فایل دارای اطلاعات مربوط به جمعیت هر شهر در ایالات متحده است. پوشه Population_Data
دارای پوشههایی برای ایالات، حاوی فایلهای CSV مجزا برای دادههای جمعیت برای هر ایالت، استخراجشده از uscitiesv1.4.csv
.
دایرکتوری کاری را تغییر دهید
بیایید دایرکتوری کاری را تغییر دهیم و با وضعیت “نیویورک” وارد فهرست راهنمای داده ها شویم.
os.chdir('Population_Data/New York')
حالا بیایید اجرا کنیم list_files
روش دوباره، اما در این دایرکتوری.
list_files(os.getcwd())
خروجی:
New York/
New York_population.csv
همانطور که می بینید، ما وارد شده ایم New York
پوشه زیر Population_Data
پوشه
ساختار دایرکتوری تک و تودرتو ایجاد کنید
حال، بیایید یک دایرکتوری جدید به نام ایجاد کنیم testdir
در این دایرکتوری
os.mkdir('testdir')
list_files(os.getcwd())
خروجی:
New York/
New York_population.csv
testdir/
همانطور که می بینید، دایرکتوری جدید را در فهرست کاری فعلی ایجاد می کند.
بیایید یک دایرکتوری تودرتو با 2 سطح ایجاد کنیم.
os.mkdir('level1dir/level2dir')
خروجی:
Traceback (most recent call last):
File "<ipython-input-12-ac5055572301>", line 1, in <module>
os.mkdir('level1dir/level2dir')
FileNotFoundError: (WinError 3) The system cannot find the path specified: 'level1dir/level2dir'
یک خطا دریافت می کنیم. به طور خاص، یک را دریافت می کنیم FileNotFoundError
. شاید تعجب کنید که چرا الف FileNotFound
هنگامی که ما در حال تلاش برای ایجاد یک فهرست هستیم.
دلیل: ماژول پایتون به دنبال دایرکتوری نامیده می شود level1dir
برای ایجاد دایرکتوری level2dir
. از آنجا که level1dir
وجود ندارد، در وهله اول، a را می اندازد FileNotFoundError
.
برای اهدافی مانند این، mkdirs()
به جای آن از تابع استفاده می شود که می تواند چندین دایرکتوری را به صورت بازگشتی ایجاد کند.
os.makedirs('level1dir/level2dir')
درخت دایرکتوری فعلی را بررسی کنید،
list_files(os.getcwd())
خروجی:
New York/
New York_population.csv
level1dir/
level2dir/
testdir/
همانطور که می بینیم، اکنون دو زیر شاخه در زیر داریم New York
پوشه testdir
و level1dir
. level1dir
یک دایرکتوری در زیر دارد به نام level2dir
.
دایرکتوری های منفرد و چندگانه را به صورت بازگشتی حذف کنید
این os
ماژول همچنین روش هایی برای تغییر یا حذف دایرکتوری ها داشت که در اینجا نشان خواهم داد.
حالا، بیایید دایرکتوری هایی را که با استفاده از آن ایجاد کرده ایم حذف کنیم rmdir
:
os.rmdir('testdir')
درخت دایرکتوری فعلی را بررسی کنید تا مطمئن شوید که دایرکتوری دیگر وجود ندارد:
list_files(os.getcwd())
خروجی:
New York/
New York_population.csv
level1dir/
level2dir/
همانطور که می بینید، testdir
حذف شده است.
بیایید سعی کنیم ساختار دایرکتوری تودرتو را حذف کنیم level1dir
و level2dir
.
os.rmdir('level1dir')
خروجی:
OSError
Traceback (most recent call last)
<ipython-input-14-690e535bcf2c> in <module>()
----> 1 os.rmdir('level1dir')
OSError: (WinError 145) The directory is not empty: 'level1dir'
همانطور که مشاهده می شود، این یک را پرتاب می کند OSError
و به درستی. می گوید که level1dir
دایرکتوری خالی نیست این درست است زیرا دارد level2dir
زیر آن
با rmdir
روش حذف یک دایرکتوری غیر خالی مشابه یونیکس ممکن نیست command-line نسخه
درست مثل makedirs()
روش، بیایید امتحان کنیم rmdirs()
، که به صورت بازگشتی دایرکتوری ها را در ساختار درختی حذف می کند.
os.removedirs('level1dir/level2dir')
بیایید دوباره ساختار درخت دایرکتوری را ببینیم:
list_files(os.getcwd())
خروجی:
New York/
New York_population.csv
این ما را به وضعیت قبلی دایرکتوری می رساند.
به عنوان مثال با پردازش داده ها
تاکنون روش مشاهده، ایجاد و حذف یک ساختار دایرکتوری تودرتو را بررسی کرده ایم. حال بیایید نمونه ای از چگونگی os
ماژول به پردازش داده ها کمک می کند.
برای آن اجازه دهید در ساختار دایرکتوری یک سطح بالاتر برویم.
os.chdir('../')
با آن، اجازه دهید دوباره ساختار درخت دایرکتوری را مشاهده کنیم.
list_files(os.getcwd())
خروجی:
Population_Data/
Alabama/
Alabama_population.csv
Alaska/
Alaska_population.csv
Arizona/
Arizona_population.csv
Arkansas/
Arkansas_population.csv
California/
California_population.csv
Colorado/
Colorado_population.csv
Connecticut/
Connecticut_population.csv
Delaware/
Delaware_population.csv
...
توجه: خروجی برای اختصار کوتاه شده است.
بیایید دادههای همه حالتها را ادغام کنیم، روی فهرست هر ایالت تکرار کنیم و فایلهای CSV را به همین ترتیب ادغام کنیم.
import os
import pandas as pd
list_states = ()
for root, dirs, files in os.walk(os.getcwd()):
if files:
list_states.append(pd.read_csv(root+'/'+files(0), index_col=None))
merge_data = pd.concat(list_states(1:), sort=False)
تا حدی با تشکر از os
ماژول ما توانستیم ایجاد کنیم merge_data
، که یک چارچوب داده حاوی داده های جمعیت از هر ایالت است.
نتیجه
در این مقاله به طور مختصر به بررسی قابلیت های مختلف داخلی پایتون پرداختیم os
مدول. ما همچنین یک مثال کوتاه از روش استفاده از ماژول در دنیای علم داده و تجزیه و تحلیل را دیدیم. درک آن مهم است os
چیزهای بیشتری برای ارائه دارد و مبتنی است روی نیاز توسعه دهنده می تواند منطق بسیار پیچیده تری ایجاد کند.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-24 08:31:04