Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การเปรียบเทียบไฟล์และไดเรกทอรีใน Python


ไลบรารีมาตรฐานของ Python มีโมดูล filecmp ที่กำหนดฟังก์ชันสำหรับการเปรียบเทียบไฟล์และไดเร็กทอรี การเปรียบเทียบนี้จะพิจารณาถึงคุณสมบัติของไฟล์นอกเหนือจากข้อมูลในไฟล์เหล่านั้น

โค้ดตัวอย่างในบทความนี้ใช้โครงสร้างไฟล์และไดเร็กทอรีต่อไปนี้

ไดเร็กทอรี dir1 และ dir2 สองไดเร็กทอรีถูกสร้างขึ้นครั้งแรกภายใต้ไดเร็กทอรีการทำงานปัจจุบัน ประกอบด้วยไฟล์ต่อไปนี้

--dir1/newfile.txt--
This is a file in dir1
--dir1/file1.txt--
Hello Python
--dir1/file2.txt--
Python Standard Library
--dir2/file1.txt--
Hello Python
--dir2/file2.txt--
Python Library

ให้เราอธิบายฟังก์ชันการเปรียบเทียบต่างๆ ในโมดูล filecmp

filecmp.cmp(f1, f2, ตื้น=จริง)

ฟังก์ชันนี้เปรียบเทียบทั้งสองไฟล์และคืนค่า True หากเหมือนกัน มิฉะนั้นจะเป็นเท็จ พารามิเตอร์ตื้นคือ True โดยค่าเริ่มต้น ดังนั้นข้อมูลเมตาของไฟล์จึงถือเป็นการเปรียบเทียบนอกเหนือจากเนื้อหา หากตั้งค่าตื้นเป็นเท็จ ระบบจะเปรียบเทียบเฉพาะเนื้อหาเท่านั้น

ตามโครงสร้างไฟล์ของเรา รหัสต่อไปนี้ให้ผลลัพธ์ตามที่แสดง -

Differing files : ['file2.txt']
>>> filecmp.cmp('dir1/file1.txt', 'dir2/file1.txt')
True
>>> filecmp.cmp('dir1/file1.txt', 'dir2/file1.txt', shallow = False)
True
>>> filecmp.cmp('dir1/file2.txt', 'dir2/file2.txt')
False

filecmp.cmpfiles(dir1, dir2, ตื้น)

ฟังก์ชันนี้ทำการเปรียบเทียบไฟล์ในสองไดเร็กทอรีและส่งคืนทูเพิลสามรายการ รายการแรกในทูเพิลคือรายการไฟล์ที่ตรงกัน รายการที่สองแสดงรายการไฟล์ที่ไม่ตรงกัน และรายการที่สามคือรายการไฟล์ทั่วไป

>>> match, mismatch,errors = filecmp.cmpfiles('dir1','dir2',['file1.txt', 'file2.txt'])
>>> match
['file1.txt']
>>> mismatch
['file2.txt']
>>> errors
[]

โมดูล filecmp ยังกำหนดคลาส dircmp วัตถุของมันคือวัตถุเปรียบเทียบไดเรกทอรี มันเปรียบเทียบไฟล์ในสองไดเร็กทอรี ซึ่งระบุว่าเป็นไดเร็กทอรีซ้ายและขวา วัตถุสามารถดำเนินการวิธีการต่าง ๆ ตามที่อธิบายไว้ด้านล่าง -

filecmp.dircmp(a,b)

นี่คือตัวสร้าง a และ b เป็นไดเร็กทอรีที่จะเปรียบเทียบ โดยค่าเริ่มต้น ไฟล์ระบบในไดเร็กทอรีจะถูกซ่อนและละเว้นในการเปรียบเทียบ

>>> result = filecmp.dircmp('dir1', 'dir2')

วิธีอื่นในคลาส dircmp มีดังนี้ -

รายงาน()

วิธีนี้จะพิมพ์ผลลัพธ์ของการเปรียบเทียบระหว่างไดเร็กทอรี

>>> result = filecmp.dircmp('dir1', 'dir2')
>>> result.report()
diff dir1 dir2
Only in dir1 : ['newfile.txt']
Identical files : ['file1.txt']
Differing files : ['file2.txt']

ซ้าย ขวา

คุณสมบัติเหล่านี้พิมพ์ชื่อของไดเร็กทอรีที่หนึ่งและสองในตัวสร้าง dircmp

>>> result.left
'dir1'
>>> result.right
'dir2'

left_list, right_list

คุณลักษณะเหล่านี้ส่งคืนรายการไฟล์ในทั้งสองไดเร็กทอรี

>>> result.left_list
['file1.txt', 'file2.txt', 'newfile.txt']
>>> result.right_list
['file1.txt', 'file2.txt']

ทั่วไป, common_files, common_dirs

แอตทริบิวต์เหล่านี้ส่งคืนไฟล์และไดเร็กทอรีทั่วไป ไฟล์ทั่วไปเท่านั้น และไดเร็กทอรีทั่วไปเท่านั้น

>>> result.common
['file1.txt', 'file2.txt']
>>> result.common_files
['file1.txt', 'file2.txt']
>>> result.common_dirs
[]

same_file, diff_files

แอตทริบิวต์ส่งคืนรายการของไฟล์ที่เหมือนกันและไฟล์ที่แตกต่างกันโดยใช้ตัวดำเนินการเปรียบเทียบที่กำหนดไว้ในคลาส dircmp

>>> result.same_files
['file1.txt']
>>> result.diff_files
['file2.txt']

บทความนี้กล่าวถึงคลาส dircmp วิธีการและฟังก์ชันการเปรียบเทียบไฟล์ที่กำหนดไว้ในโมดูล filecmp