از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
ماژول tempfile پایتون
سرفصلهای مطلب
معرفی
فایل های موقت یا «فایل های موقت» عمدتاً برای ذخیره اطلاعات میانی استفاده می شوند روی دیسک برای یک برنامه این فایل ها معمولا برای اهداف مختلفی مانند موقت ایجاد می شوند backup یا اگر برنامه با یک مجموعه داده بزرگتر از حافظه سیستم سر و کار دارد و غیره. در حالت ایده آل، این فایل ها در یک دایرکتوری جداگانه قرار دارند که متفاوت است. روی سیستم عامل های مختلف، و نام این فایل ها منحصر به فرد است. داده های ذخیره شده در فایل های موقت همیشه پس از پایان برنامه مورد نیاز نیست، بنابراین ممکن است بخواهید این فایل ها پس از استفاده حذف شوند.
پایتون ماژولی را ارائه می دهد که به آن معروف است tempfileکه ایجاد و مدیریت فایل های موقت را آسان تر می کند. این ماژول چند روش برای ایجاد فایل ها و دایرکتوری های موقت به روش های مختلف ارائه می دهد. tempfile
هر زمان که بخواهید از فایل های موقت برای ذخیره داده ها در برنامه پایتون استفاده کنید مفید است. بیایید به چند نمونه مختلف نگاهی بیندازیم روی چگونه tempfile
می توان از ماژول استفاده کرد.
ایجاد یک فایل موقت
فرض کنید برنامه شما به یک فایل موقت برای استفاده در برنامه نیاز دارد، یعنی یک فایل ایجاد می کند، از آن برای ذخیره برخی داده ها استفاده می کند و بعد از استفاده آن را حذف می کند. برای رسیدن به این هدف می توانیم از TemporaryFile()
تابع.
این تابع یک فایل موقت به صورت پیش فرض ایجاد می کند tempfile
محل. این مکان ممکن است بین سیستم عامل ها متفاوت باشد. بهترین بخش این است که فایل موقت ایجاد شده توسط TemporaryFile()
هر زمان که فایل بسته شود به طور خودکار حذف می شود. همچنین هیچ مرجعی برای این فایل در جدول فایل سیستم سیستم ایجاد نمی کند. این باعث می شود تا برنامه فعلی خصوصی شود، یعنی هیچ برنامه دیگری قادر به باز کردن فایل نخواهد بود.
بیایید نگاهی به برنامه پایتون زیر بیندازیم تا ببینیم چگونه کار می کند:
import tempfile
print("Creating one temporary file...")
temp = tempfile.TemporaryFile()
try:
print("Created file is:", temp)
print("Name of the file is:", temp.name)
finally:
print("Closing the temp file")
temp.close()
خواهد شد print خروجی زیر:
$ python3 temp-file.py
Creating one temporary file...
Created file is: <_io.BufferedRandom name=4>
Name of the file is: 4
Closing the temp file
- برای ایجاد یک فایل موقت در پایتون، باید import را
tempfile
مدول. - همانطور که در بالا توضیح داده شد، ما فایل موقت را با استفاده از
TemporaryFile()
تابع. - از خروجی، می توانید ببینید که شی ایجاد شده در واقع یک فایل نیست، یک شیء فایل مانند است. و
mode
پارامتر (در مثال ما نشان داده نشده است) فایل ایجاد شده استw+b
یعنی می توانید بدون بسته بودن بخوانید و بنویسید. - فایل موقت ایجاد شده نامی ندارد.
- در نهایت، ما در حال بستن فایل با استفاده از
close()
روش. پس از بسته شدن از بین می رود.
نکته ای که باید به آن اشاره کنیم این است که فایل ایجاد شده با استفاده از TemporaryFile()
تابع ممکن است یک نام قابل مشاهده در سیستم فایل داشته باشد یا نداشته باشد. در یونیکس، ورودی دایرکتوری برای فایل پس از ایجاد به طور خودکار حذف می شود، اگرچه این مورد پشتیبانی نمی شود روی دیگر پلتفرم ها به طور معمول TemporaryFile()
راه ایده آل برای ایجاد یک فضای ذخیره سازی موقت برای هر برنامه در پایتون است.
یک فایل موقت با نام ایجاد کنید
در مثال قبلی ما دیدیم که فایل موقت با استفاده از TemporaryFile()
تابع در واقع یک شیء فایل مانند بدون نام فایل واقعی است. پایتون همچنین یک روش متفاوت ارائه می دهد، NamedTemporaryFile()
، برای ایجاد یک فایل با یک نام قابل مشاهده در سیستم فایل به غیر از ارائه یک نام برای tempfile، NamedTemporaryFile()
مانند کار می کند TemporaryFile()
. حالا بیایید از همان مثال بالا برای ایجاد یک فایل موقت با نام استفاده کنیم:
import tempfile
print("Creating one named temporary file...")
temp = tempfile.NamedTemporaryFile()
try:
print("Created file is:", temp)
print("Name of the file is:", temp.name)
finally:
print("Closing the temp file")
temp.close()
اجرای این کد انجام خواهد شد print خروجی مشابه زیر
$ python3 named-temp-file.py
Creating one named temporary file...
Created file is: <tempfile._TemporaryFileWrapper object at 0x103f22ba8>
Name of the file is: /var/folders/l7/80bx27yx3hx_0_p1_qtjyyd40000gn/T/tmpa3rq8lon
Closing the temp file
بنابراین، فایل ایجاد شده در واقع این بار یک نام دارد. مزیت از NamedTemporaryFile()
این است که می توانیم نام فایل های موقت ایجاد شده را ذخیره کرده و بعداً قبل از بستن یا از بین بردن آن ها استفاده کنیم. اگر delete
پارامتر تنظیم شده است False
، سپس میتوانیم فایل را بدون اینکه از بین برود ببندیم و به ما اجازه میدهد بعداً آن را دوباره باز کنیم روی.
ارائه پسوند یا پیشوند برای نام
گاهی اوقات ما نیاز داریم که یک پیشوند یا پسوند به نام یک فایل موقت اضافه کنیم. این به ما کمک می کند تا تمام فایل های موقت ایجاد شده توسط برنامه خود را شناسایی کنیم.
برای رسیدن به این هدف می توانیم از همان استفاده کنیم NamedTemporaryFile
تابع تعریف شده در بالا تنها چیزی که باید اضافه کنیم دو پارامتر اضافی در هنگام فراخوانی این تابع است: suffix
و prefix
import tempfile
temp = tempfile.NamedTemporaryFile(prefix="dummyPrefix_", suffix="_dummySuffix")
try:
print("Created file is:", temp)
print("Name of the file is:", temp.name)
finally:
temp.close()
اجرای این کد انجام خواهد شد print خروجی زیر:
$ python3 prefix-suffix-temp-file.py
Created file is: <tempfile._TemporaryFileWrapper object at 0x102183470>
Name of the file is: /var/folders/tp/pn3dvz_n7cj7nfs0y2szsk9h0000gn/T/dummyPrefix_uz63brcp_dummySuffix
بنابراین، اگر دو آرگومان اضافی را پاس کنیم suffix
و prefix
به NamedTemporaryFile()
عملکرد، به طور خودکار مواردی را در ابتدا و انتهای نام فایل اضافه می کند.
پیدا کردن مکان پیش فرض فایل های Temp
این tempfile.tempdir
متغیر مکان پیش فرض را برای همه فایل های موقت نگه می دارد. اگر ارزش از tempdir
است None
یا تنظیم نشده، پایتون یک لیست استاندارد از دایرکتوری ها را جستجو می کند و تنظیم می کند tempdir
به مقدار دایرکتوری اول، اما تنها در صورتی که برنامه فراخوان بتواند فایلی را در آن ایجاد کند. فهرست زیر فهرست دایرکتوری هایی است که اسکن می شود، به ترتیب:
- فهرستی که توسط متغیر محیطی TMPDIR نامگذاری شده است
- دایرکتوری نامگذاری شده توسط متغیر محیطی TEMP
- فهرستی که توسط متغیر محیطی TMP نامگذاری شده است
- دایرکتوری های پلتفرم خاص:
- در ویندوز، C:\TEMP، C:\TMP، \TEMP و \TMP به همین ترتیب.
- در پلتفرم های دیگر، /tmp، /var/tmp، و /usr/tmp به همین ترتیب.
- دایرکتوری کاری فعلی
برای اطلاع از موقعیت پیش فرض فایل های موقت، می توانیم با شماره تماس بگیرید tempfile.gettempdir()
روش. این مقدار را برمی گرداند tempdir
اگر نیست None
. در غیر این صورت ابتدا مکان دایرکتوری را با استفاده از مراحل ذکر شده در بالا جستجو می کند و سپس مکان را برمی گرداند.
import tempfile
print("Current temp directory:", tempfile.gettempdir())
tempfile.tempdir = "/temp"
print("Temp directory after change:", tempfile.gettempdir())
اگر برنامه فوق را اجرا کنید، اجرا خواهد شد print خروجی مشابه زیر:
$ python3 dir-loc-temp-file.py
Current temp directory: /var/folders/tp/pn3dvz_n7cj7nfs0y2szsk9h0000gn/T
Temp directory after change: /temp
می بینید که اولین مکان دایرکتوری موقت، محل دایرکتوری ارائه شده توسط سیستم است و دایرکتوری موقت دوم همان مقداری است که ما تعریف کرده ایم.
خواندن و نوشتن داده ها از فایل های Temp
ما یاد گرفتیم که چگونه یک فایل موقت ایجاد کنیم، یک فایل موقت با نام ایجاد کنیم و چگونه یک فایل موقت با پسوند و/یا پیشوند ایجاد کنیم. اکنون، بیایید سعی کنیم روش خواندن و نوشتن داده ها از یک فایل موقت در پایتون را درک کنیم.
خواندن و نوشتن داده ها از یک فایل موقت در پایتون بسیار ساده است. برای نوشتن می توانید از write()
روش و برای خواندن می توانید از read()
روش. مثلا:
import tempfile
temp = tempfile.TemporaryFile()
try:
temp.write(b'Hello world!')
temp.seek(0)
print(temp.read())
finally:
temp.close()
این اراده print خروجی به عنوان b'Hello world!'
از آنجا که write()
روش داده های ورودی را بر حسب بایت می گیرد (از این رو b
پیشوند روی رشته).
اگر می خواهید داده های متنی را در یک فایل موقت بنویسید، می توانید از آن استفاده کنید writelines()
روش در عوض. برای استفاده از این روش، باید tempfile را با استفاده از آن ایجاد کنیم w+t
حالت به جای حالت پیش فرض w+b
حالت برای انجام این کار، الف mode
پارامتر را می توان به TemporaryFile()
برای تغییر حالت فایل temp ایجاد شده.
import tempfile
temp = tempfile.TemporaryFile(mode='w+t')
try:
temp.writelines("Hello world!")
temp.seek(0)
print(temp.read())
finally:
temp.close()
برخلاف مثال قبلی، این خواهد شد print “Hello World” به عنوان خروجی.
یک دایرکتوری موقت ایجاد کنید
اگر برنامه شما چندین فایل موقت دارد، ممکن است راحت تر باشد که یک دایرکتوری موقت ایجاد کنید و همه فایل های موقت خود را داخل آن قرار دهید. برای ایجاد یک دایرکتوری موقت، می توانیم از TemporaryDirectory()
تابع. پس از بسته شدن همه فایل های موقت، باید دایرکتوری را به صورت دستی حذف کنیم.
import tempfile
with tempfile.TemporaryDirectory() as tmpdirname:
print('Created temporary directory:', tmpdirname)
خواهد شد print خروجی زیر:
$ python3 mk-dir-temp-file.py
Created temporary directory: /var/folders/l7/80bx27yx3hx_0_p1_qtjyyd40000gn/T/tmpn_ke7_rk
یک فایل و فهرست موقت امن ایجاد کنید
با استفاده از mkstemp()
، می توانیم یک فایل موقت را به امن ترین شکل ممکن ایجاد کنیم. فایل موقت ایجاد شده با استفاده از این روش فقط توسط شناسه کاربری ایجاد کننده قابل خواندن و نوشتن است. ما می توانیم عبور کنیم prefix
و suffix
آرگومان هایی برای اضافه کردن پیشوند و پسوند به نام فایل ایجاد شده. به طور پیش فرض، فایل را در حالت باینری باز می کند. برای باز کردن آن در حالت متنی، می توانیم عبور دهیم text=True
به عنوان یک آرگومان برای تابع بر خلاف TemporaryFile()
، فایل ایجاد شده توسط mkstemp()
پس از بستن آن به طور خودکار حذف نمی شود.
همانطور که در مثال زیر مشاهده می کنید، کاربر مسئول حذف فایل است.
import tempfile
import os
temp_directory = tempfile.TemporaryDirectory()
print("Directory name:", temp_directory)
os.removedirs(temp_directory)
$ python3 mk-secure-dir-temp-file.py
Directory name: /var/folders/tp/pn3dvz_n7cj7nfs0y2szsk9h0000gn/T/tmpf8f6xc53
شبیه به mkstemp()
، می توانیم با استفاده از mkdtemp()
روش. و باز هم مثل mkstemp()
، همچنین پشتیبانی می کند prefix
و suffix
آرگومان هایی برای افزودن پیشوند و پسوند به نام دایرکتوری.
نتیجه
در این مقاله روش های مختلف ایجاد فایل ها و دایرکتوری های موقت در پایتون را یاد گرفتیم. می توانید از فایل های موقت در هر برنامه پایتونی که می خواهید استفاده کنید. اما فقط مطمئن شوید که آن را حذف کنید اگر روش خاص استفاده شده به طور خودکار آن را حذف نمی کند روی خودش همچنین به خاطر داشته باشید که رفتار ممکن است بین سیستم عامل ها متفاوت باشد، مانند نام دایرکتوری خروجی و نام فایل.
همه این توابعی که در بالا توضیح دادیم با آرگومانهای مختلف کار میکنند، اگرچه ما به طور مفصل توضیح ندادهایم که هر تابع چه نوع آرگومانهایی را میگیرد. اگر می خواهید در مورد آن بیشتر بدانید tempfile
ماژول، باید پایتون 3 را بررسی کنید اسناد رسمی.
(برچسبها به ترجمه)# python
منتشر شده در 1403-01-27 20:40:06