filecmp --- مقایسه پروندهها و پوشهها¶
کد منبع: Lib/filecmp.py
ماژول filecmp توابعی برای مقایسه پروندهها و پوشهها تعریف میکند، با موازنههای اختیاری مختلف بین زمان و صحت. برای مقایسه پروندهها، ماژول difflib را نیز ببینید.
ماژول filecmp توابع زیر را تعریف میکند:
-
filecmp.cmp(f1, f2, shallow=True)¶
پروندههایی با نامهای f1 و f2 را مقایسه میکند و اگر به نظر برابر باشند، True و در غیر این صورت False را برمیگرداند.
اگر shallow درست باشد و امضاهای os.stat() هر دو پرونده (نوع پرونده، اندازه و زمان اصلاح) یکسان باشند، پروندهها برابر در نظر گرفته میشوند.
در غیر این صورت، اگر اندازه یا محتوای پروندهها متفاوت باشد، آنها متفاوت در نظر گرفته میشوند.
توجه داشته باشید که هیچ برنامهی خارجیای توسط این تابع فراخوانی نمیشود، که این امر باعث قابلیت حمل و کارایی آن میشود.
این تابع از یک نهانگاه برای مقایسهها و نتایج گذشته استفاده میکند و چنانچه اطلاعات os.stat() مربوط به پرونده تغییر کند، ورودیهای نهانگاه نامعتبر میشوند. میتوان کل نهانگاه را با استفاده از clear_cache() پاک کرد.
-
filecmp.cmpfiles(a, b, common, shallow=True)¶
پروندههای موجود در دو پوشهی a و b را که نامهای آنها توسط common داده شده است، مقایسه کنید.
سه فهرست از نام پروندهها برمیگرداند: match، mismatch، errors. match شامل فهرست پروندههایی است که مطابقت دارند، mismatch شامل نام آنهایی است که مطابقت ندارند، و errors نام پروندههایی را فهرست میکند که مقایسه آنها ممکن نبوده است. پروندهها در errors فهرست میشوند اگر در یکی از پوشهها وجود نداشته باشند، کاربر دسترسی لازم برای خواندن آنها را نداشته باشد، یا مقایسه به دلیل دیگری امکانپذیر نباشد.
پارامتر shallow همان معنا و مقدار پیشفرضِ filecmp.cmp() را دارد.
برای مثال، cmpfiles('a', 'b', ['c', 'd/e']) a/c را با b/c و a/d/e را با b/d/e مقایسه میکند. 'c' و 'd/e' هرکدام در یکی از سه فهرست برگرداندهشده قرار خواهند گرفت.
-
filecmp.clear_cache()¶
نهانگاه filecmp را پاک کنید. این ممکن است زمانی مفید باشد که پروندهای آنقدر سریع پس از تغییرش مقایسه شود که در محدودهی دقت mtime سامانه فایلبندی زیرین قرار گیرد.
-
class filecmp.dircmp(a, b, ignore=None, hide=None, *, shallow=True)¶
یک شیء جدید مقایسهی پوشه میسازد، تا پوشههای a و b را مقایسه کند. ignore فهرستی از نامها برای نادیدهگرفتن است و مقدار پیشفرض آن filecmp.DEFAULT_IGNORES است. hide فهرستی از نامها برای پنهانکردن است و مقدار پیشفرض آن [os.curdir, os.pardir] است.
کلاس dircmp بهطور پیشفرض با استفاده از پارامتر shallow، پروندهها را با انجام مقایسههای سطحی (shallow) مقایسه میکند، همانگونه که برای filecmp.cmp() شرح داده شده است.
تغییر یافته در نسخهی 3.13: پارامتر shallow اضافه شد.
کلاس dircmp متدهای زیر را ارائه میکند:
-
report()¶
مقایسهای بین a و b را (در sys.stdout) چاپ کنید.
-
report_partial_closure()¶
مقایسهای میان a و b و زیرپوشههای مستقیم مشترک را چاپ میکند.
-
report_full_closure()¶
مقایسهای بین a و b و زیرپوشههای مشترک (بهصورت بازگشتی) را چاپ میکند.
کلاس dircmp تعدادی ویژگی جالب ارائه میدهد که میتوان از آنها برای دریافت اطلاعات گوناگون درباره درختهای پوشه مقایسهشده استفاده کرد.
توجه داشته باشید که از طریق قلابهای __getattr__()، همه ویژگیها بهصورت تنبل محاسبه میشوند، بنابراین اگر فقط از ویژگیهایی استفاده شود که محاسبهشان کمهزینه است، هیچ هزینهای از نظر سرعت وجود ندارد.
-
left¶
پوشهی a.
-
right¶
پوشهی b.
-
left_list¶
پروندهها و زیرپوشههای درون a، که با hide و ignore فیلتر شدهاند.
-
right_list¶
پروندهها و زیرپوشههای موجود در b، پالایششده بر اساس hide و ignore.
-
common¶
پروندهها و زیرپوشهها در هر دو a و b.
-
left_only¶
پروندهها و زیرپوشهها فقط در a.
-
right_only¶
پروندهها و زیرپوشههایی که فقط در b وجود دارند.
-
common_dirs¶
زیرپوشههای موجود در هر دو a و b.
-
common_files¶
پروندههای موجود در هر دو a و b.
-
common_funny¶
نامهایی که در هر دو a و b وجود دارند، بهطوری که نوع آنها بین پوشهها متفاوت است، یا نامهایی که os.stat() برای آنها خطا گزارش میدهد.
-
same_files¶
پروندههایی که در هر دو a و b یکسان هستند، با استفاده از عملگر مقایسهی فایلِ کلاس.
-
diff_files¶
پروندههایی که در هر دو a و b وجود دارند و محتوای آنها بر اساس عملگر مقایسهی فایلِ کلاس متفاوت است.
-
funny_files¶
پروندههایی که در هر دو a و b وجود دارند، اما قابل مقایسه نبودند.
-
subdirs¶
دیکشنریای که نامهای موجود در common_dirs را به نمونههای dircmp نگاشت میکند (یا به نمونههای MyDirCmp، در صورتی که این نمونه از نوع MyDirCmp، که یک کلاس فرعی از dircmp است، باشد).
تغییر یافته در نسخهی 3.10: پیشتر، مدخلها همیشه نمونههای dircmp بودند. اکنون مدخلها همان نوع self هستند، اگر self زیرکلاسی از dircmp باشد.
-
filecmp.DEFAULT_IGNORES¶
-
فهرست پوشههایی که بهطور پیشفرض توسط dircmp نادیده گرفته میشوند.
در اینجا یک مثال سادهشده از استفاده از ویژگی subdirs برای جستجوی بازگشتی در دو پوشه جهت نمایش پروندههای مشترک متفاوت آمده است:
>>> from filecmp import dircmp
>>> def print_diff_files(dcmp):
... for name in dcmp.diff_files:
... print("diff_file %s found in %s and %s" % (name, dcmp.left,
... dcmp.right))
... for sub_dcmp in dcmp.subdirs.values():
... print_diff_files(sub_dcmp)
...
>>> dcmp = dircmp('dir1', 'dir2')
>>> print_diff_files(dcmp)
©
حق نشر 2001 Python Software Foundation.
این صفحه تحت مجوز بنیاد نرمافزار پایتون نسخه ۲ منتشر شده است.
مثالها، دستورالعملها، و سایر کدهای موجود در مستندات همچنین تحت مجوز بدون بند BSD منتشر شدهاند.
برای اطلاعات بیشتر به
تاریخچه و مجوز مراجعه کنید.
بنیاد نرمافزار پایتون یک شرکت غیرانتفاعی است.
لطفاً کمک مالی کنید.
آخرین بهروزرسانی در نوامبر 12, 2026 (06:19 UTC).
آیا
اشکالی یافتید؟
ساخته شده با
Sphinx 9.1.0.