Các ví dụ về DeepDiff Python
Thư viện DeepDiff được sử dụng để thực hiện tìm kiếm và sự khác biệt trong các đối tượng Python. Nó đi kèm với ba hoạt động Show
Cài đặt từ PyPi
Tìm kiếm nâng caoTìm kiếm sâu bên trong các đối tượng để tìm mục phù hợp với tiêu chí của bạn Lưu ý rằng đó là tìm kiếm đường dẫn phù hợp với tiêu chí của bạn hoặc từ trong một mục ví dụ
DeepSearch đi kèm với chức năng Tìm kiếm trong danh sách cho chuỗi
Tìm kiếm trong dữ liệu lồng nhau cho chuỗi
Để lấy các khóa và giá trị của các đối tượng phù hợp, bạn có thể sử dụng đối tượng Trích xuất
Người giới thiệu
Cập nhật lần cuối. 19-04-2021 Ok các kết quả trên rõ ràng là không hữu ích lắm. DeepDiff đang so sánh các mục theo từng dòng. Thay vào đó, điều chúng tôi quan tâm là so sánh các mục dựa trên trường “nguồn” trong csv. Chúng ta có thể sử dụng cái mới
loại trừ-regex-đường dẫnChúng tôi chỉ quan tâm đến tỷ lệ thoát và thay đổi thứ hạng trong các kết quả trên. Làm thế nào chúng ta có thể giới hạn kết quả chỉ những gì chúng ta muốn?
________số 8_______ Tuyệt vời, kết quả bây giờ hữu ích hơn chữ số có nghĩaMột số trong những số này quá gần nhau. Có thể chúng tôi không quan tâm nếu tỷ lệ thoát của 9 thay đổi từ 43. 71677762295505 đến 43. 265798602382986
Nhưng chúng tôi quan tâm đến tỷ lệ thoát của Đối tác thay đổi gần 6%
DeepDiff cung cấp các tính năng mới để giải quyết vấn đề này
Tuyệt vời, chúng tôi chỉ thấy những thay đổi quan trọng nhất. Thứ hạng của 0 đã thay đổi từ 7 lên 6 trong một tháng, tỷ lệ thoát của 1 đã giảm 6% và thứ hạng của 2 cũng được cải thiệnchữ số có nghĩa đằng sau cảnhĐể hiểu cách thức hoạt động, chúng ta cần xem xét hàm 3Hãy nhớ tỷ lệ thoát 9 đã bị loại bỏ khi chúng tôi sử dụng 5
1Hàm này chuyển đổi các số thành các chuỗi và "làm tròn" chúng dựa trên các chữ_số_có_nghĩa đã được chuyển. Các chữ_số_có_nghĩa là các chữ số sau dấu thập phân Lưu ý rằng với 6, 2 số dấu phẩy động cho tỷ lệ thoát của 9 được làm tròn thành 43 và 44, điều đó có nghĩa là DeepDiff sẽ báo cáo chúng trong các kết quả khácchữ số có nghĩa + ký hiệu định dạng sốĐó là nơi đến để chơi
3Bằng cách chuyển sang 8, chúng tôi đang chuyển sang “ký hiệu khoa học”. Và bằng cách đặt 9, chúng tôi đang xóa 43. 265798602382986 so với. 43. 71677762295505 từ các kết quả khác
Bây giờ chúng ta đã biết cách phân biệt các tệp để nhận được kết quả mình cần, hãy tự hỏi mình những câu hỏi thú vị tiếp theo. Những tháng nào giống nhau nhất? DeepDiff cung cấp giải pháp cho câu hỏi này thông qua Khoảng cách sâu Khoảng cách sâu là khoảng cách giữa 2 đối tượng. Nó là một số dấu phẩy động giữa 0 và 1. Khoảng cách sâu trong khái niệm được lấy cảm hứng từ Levenshtein Chỉnh sửa khoảng cách Về cốt lõi, Khoảng cách sâu là số thao tác cần thiết để chuyển đổi một đối tượng này sang đối tượng khác chia cho tổng kích thước của 2 đối tượng được giới hạn ở mức 1. Lưu ý rằng không giống như Khoảng cách Levenshtein, Khoảng cách sâu dựa trên số lượng thao tác chứ KHÔNG phải số lượng thao tác “tối thiểu” để chuyển đổi một đối tượng sang đối tượng khác. Con số phụ thuộc nhiều vào mức độ chi tiết của kết quả khác. Và độ chi tiết được kiểm soát bởi các tham số được truyền cho DeepDiff Dòng lệnh 8 mang lại cho bạn khoảng cách sâu khi bạn vượt qua cờ 1. Ví dụ: hãy lấy khoảng cách sâu giữa tháng 4 và tháng 7 6 7tháng 04 khoảng cách từ tháng 07 là 0. 168 Còn tháng 05 từ 07 thì sao? 8 9tháng 05 khoảng cách từ tháng 07 là 0. 118 Và tháng 06 từ 07? 0 1tháng 06 khoảng cách từ tháng 07 là 0. 084
ví dụ 2Hãy xem một dữ liệu mẫu khác. Chúng tôi có các tệp csv sau t1. csv first_namelast_namezipJoeNobody90011JimmyBrown90007SaraSmith90007t2. csv first_namelast_namezipJoeNobody90011JimmyBrown90404SaraSmith90007 2Như bạn có thể thấy ở đây, Jimmy đã chuyển từ trung tâm thành phố LA (90007) đến Santa Monica (90404) Hãy cùng xem t3. csv ngay bây giờ first_namelast_namezipJoeNobody90011SaraSmith90007JimmyBrown90404Khi chúng ta chạy lệnh diff 3Kết quả có vẻ không hữu ích lắm. Nó thực sự đã so sánh các hàng theo từng dòng Có lẽ nếu chúng ta không quan tâm đến thứ tự của các hàng, chúng ta có thể nhận được nhiều kết quả hữu ích hơn? 4Lặp lại và bỏ qua thứ tựỞ đây chúng tôi có một dòng lặp lại trong t4. csv first_namelast_namezipJoeNobody90011JimmyBrown90404SaraSmith90007JimmyBrown90404Lưu ý rằng việc lặp lại sẽ không biến nó thành kết quả khác khi vượt qua 2 5VáDeepDiff cho phép bạn tạo các “bản vá” giống như lệnh vá của Linux. Lưu ý rằng "bản vá" dòng lệnh chỉ là một tập hợp con của API Python của Delta của DeepDiff cung cấp Chúng tôi tạo bản vá bằng cách chuyển 4. Ngoài ra, vì chúng tôi đang bỏ qua thứ tự của các hàng, nên chúng tôi cần chuyển 5 để đảm bảo rằng các lần lặp lại là một phần của kết quả "khác biệt" trong bản vá 6Hãy nhớ rằng sự khác biệt giữa 2 tệp đó là mã zip của hàng một đã thay đổi thành 90404 Ví dụ, hãy có t1new. csv first_namelast_namezipJoeNobody90011JimmyBrown90007SaraSmith90007JohnDoe90001MaxFoo23232Hãy tạo thêm một tệp vá 7Vì vậy chúng tôi có
Áp dụng các bản vá lỗiLệnh này có giao diện rất giống với lệnh 6 của Linux 8first_namelast_namezipJoeNobody90011JimmyBrown90404SaraSmith90007JohnDoe90001MaxFoo23232Tuyệt vời, nó đã cập nhật mã zip của Jimmy thành 90404 trong t1new này. tệp csv Chúng tôi có thể sử dụng lại cùng một tệp vá trên t1 9t1. csv sau khi áp dụng bản vá 1. Mã zip của Jimmy trong tệp này cũng được cập nhật first_namelast_namezipJoeNobody90011JimmyBrown90404SaraSmith90007 0t1. csv bây giờ thực sự giống như t1new. csv first_namelast_namezipJoeNobody90011JimmyBrown90404SaraSmith90007JohnDoe90001MaxFoo23232Các bản vá có thể được áp dụng cho bất kỳ đối tượng nào. 7 1Có, chúng tôi có thể vá tệp yaml này từ tệp vá mà chúng tôi đã tạo giữa 2 tệp csv 8 2
9Patch2 thêm các dòng mới vào tệp yaml 3Còn việc áp dụng cho một đối tượng python thì sao?Như đã lưu ý, lệnh 0 là giao diện dòng lệnh cho cái mà DeepDiff gọi là Delta 4Đối tượng Delta có thể được áp dụng cho các đối tượng Python 5Các tệp "bản vá" về cơ bản là từ điển Delta được đánh số thứ tự thông qua dưa của Python. Bạn có thể áp dụng các bản vá đó cho bất kỳ đối tượng nào. Từ các kiểu dựng sẵn của python đến các lớp tùy chỉnh, mảng Numpy và hơn thế nữa. Giao diện dòng lệnh cho phép bạn tạo và sử dụng bản vá từ các tệp csv, json, toml, yaml và pickle Tìm kiếm một cái gì đó trong tập tin?được sử dụng để grep thông qua các tập tin. Ví dụ: hãy tìm 2 trong tệp yaml ở trên 6Chúng tôi nhận được đường dẫn chính xác đến [các] mục có sara trong đó thay vì chỉ số dòng [s] Cho phép bạn trích xuất các giá trị từ đường dẫn trong một tệp 7Phần kết luậnGiao diện dòng lệnh mới cho DeepDiff cung cấp nhiều cách dễ tiếp cận hơn để xử lý trực tiếp các tệp từ bên trong trình bao |