Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách đọc, viết hoặc thực hiện các thao tác khác nhau trên các tệp YAML bằng Python. Chúng tôi sẽ thảo luận về định dạng tệp YAML, cách sử dụng và cách chúng tôi có thể thao tác với nó bằng Python
Hãy giới thiệu ngắn gọn về YAML
YAML là gì?
YAML là viết tắt của Yet Another Markup Language. Nó lưu trữ dữ liệu tệp cấu hình theo cách tuần tự hóa;
YAML hỗ trợ ba loại dữ liệu - vô hướng [chuỗi, số nguyên và số float], danh sách và mảng kết hợp
Các tệp YAML được lưu với. yaml hoặc. tiện ích mở rộng yml. Chúng tôi có thể sử dụng nhận xét trong YAML bằng ký hiệu #. Một dấu gạch nối trước mỗi tiểu mục bên trong. Các giá trị có thể được lồng vào nhau bằng cách sử dụng thụt đầu dòng
Ưu điểm của YAML
Một số ưu điểm quan trọng của YAML như sau
- Tất cả các ngôn ngữ lập trình đều hỗ trợ YAML - Chúng ta cần viết YAML bằng một ngôn ngữ và có thể được sử dụng với hầu hết mọi ngôn ngữ lập trình mà không cần sửa đổi gì
- Tuần tự hóa đối tượng - Chúng tôi có thể tuần tự hóa định dạng dữ liệu YAML
- Dễ đọc - Không có quy tắc cố định nào để tạo tệp YAML. Một vết lõm đơn giản được sử dụng để xác định khối và tài liệu riêng lẻ
Trước khi bắt đầu thêm, chúng tôi giả định rằng bạn đã có hiểu biết cơ bản về Python hoặc có kinh nghiệm lập trình ở cấp độ mới bắt đầu với ngôn ngữ lập trình Python
Mô-đun PyYAML
PyYAML là một mô-đun Python cung cấp nhiều phương thức để thực hiện một số thao tác trên tệp YAML. Chúng tôi có thể dễ dàng chuyển đổi tệp YAML thành Từ điển và đọc nội dung của nó. Với sự trợ giúp của mô-đun YAML, chúng ta có thể đọc ghi các tệp YAML cấu hình phức tạp, tuần tự hóa và duy trì dữ liệu YAML
Để sử dụng PyYAML, chúng tôi cần cài đặt nó trong hệ thống của mình. Dưới đây là các bước cài đặt của mô-đun PyYAML
Cài đặt PyYAML
Chúng ta có thể cài đặt nó bằng phương pháp dưới đây
- Cài đặt bằng lệnh pip
- Cài đặt qua mã nguồn
Sử dụng lệnh pip
Chúng ta có thể cài đặt nó bằng lệnh pip. Nhập lệnh sau vào terminal để cài đặt mô-đun PyYAML
Cài đặt qua mã nguồn
Chúng ta có thể sử dụng cách cài đặt thay thế trong trường hợp gặp lỗi bằng cách sử dụng lệnh pip. Thực hiện theo các hướng dẫn dưới đây
- Mở kho lưu trữ PyYAML Github, nhấp vào phần mã và tải xuống tệp ZIP
- Giải nén tệp zip đã tải xuống
- Bây giờ hãy mở terminal và thay đổi thư mục giải nén tệp zip
- Bây giờ hãy chạy thiết lập python. lệnh py và nhấn nút enter. Nó sẽ cài đặt mô-đun PyYAML trong máy của bạn
Đọc tệp YAML
Đầu tiên, chúng tôi tạo một tệp YAML mới có tên là mẫu. tệp yaml sẽ sử dụng để đọc bằng mô-đun PyYAML
vật mẫu. py
cây khoai mỡ. phương thức load[] được sử dụng để đọc tệp YAML. Phương thức này phân tích cú pháp và chuyển đổi đối tượng YAML thành từ điển Python để chúng ta có thể đọc nội dung dễ dàng. Quá trình này được gọi là Deserialization các tệp YAML thành Python
Phương thức load[] nhận một đối số, có thể là chuỗi byte, đối tượng tệp nhị phân mở, chuỗi Unicode hoặc đối tượng tệp YAML mở
Nếu chúng ta chuyển tệp hoặc chuỗi byte làm đối số, nó sẽ được mã hóa bằng utf-8, utf-16-be hoặc utf-16-le
Hãy hiểu ví dụ sau
Ví dụ -
đầu ra
[{'UserName': 'Antonio', 'Password': 'fire123 *', 'phone': 9879098, 'Skills': '-Python -SQL -Django -Rest Framework -JavaScript'}]
Giải trình -
Chúng tôi đã nhập yaml và Trình tải của nó vào trình đọc tệp YAML trong đoạn mã trên. Hàm load[] đi kèm với bốn loại Trình tải
- SafeLoader - Chúng tôi đã sử dụng Trình tải này trong ví dụ trên. Nó tải một tập hợp con của YAML một cách an toàn. Nó chủ yếu được sử dụng khi đầu vào từ một nguồn không đáng tin cậy
- BaseLoader - Nó tải tất cả các đại lượng YAML cơ bản dưới dạng Chuỗi
- FullLoader - Nó hoạt động giống như BaseLoader nhưng tránh thực thi mã tùy ý. Nếu đầu vào từ một nguồn không đáng tin cậy, nó có thể gây ra mối đe dọa bảo mật
- UnsaeLoader - Trình tải được khuyến nghị cho đầu vào nguồn không đáng tin cậy và thường được sử dụng để tương thích ngược
Phương thức load[] trả về đối tượng trình tạo mà chúng ta nhập vào danh sách và có thể truy cập bất kỳ phần tử nào
Chúng tôi cũng có thể nhận được các giá trị tương tự ở dạng từ điển. Hãy hiểu ví dụ sau
Chúng tôi cũng có thể lấy các giá trị yaml ở dạng từ điển. Hãy hiểu ví dụ sau
Ví dụ - 2
đầu ra
{'UserName': 'Antonio', 'Password': 'fire123 *', 'phone': 9879098, 'Skills': '-Python -SQL -Django -Rest Framework -JavaScript'}
Chúng tôi đã thay đổi đối số vô hướng SafeLoader thành FullLoader đã chuyển đổi dữ liệu YAML thành Từ điển. Ưu điểm của loader này là không cần gõ cast dữ liệu đã load vào list
Đọc nhiều tài liệu YAML
Chúng ta có thể đọc nhiều tài liệu yaml bằng cách sử dụng yaml. phương thức load_all[]. Một tệp YAML có thể có nhiều tài liệu. Dưới đây là ví dụ về nhiều tài liệu trong một tệp
vật mẫu. khoai mỡ
Văn bản bắt đầu bằng ba dấu gạch ngang [---] và kết thúc bằng ba dấu chấm […]. Hãy hiểu ví dụ sau
Ví dụ -
đầu ra
[{'UserName': 'Antonio', 'Password': 'fire123 *', 'phone': 9879098, 'Skills': '-Python -SQL -Django -Rest Framework -JavaScript'}, {'UserName': 'Maino', 'Password': 'fire123 *', 'phone': 9879098, 'Skills': '-Python -SQL -Django -Rest Framework -JavaScript'}, {'UserName': 'George', 'Password': 'fire123 *', 'phone': 9879098, 'Skills': '-Python -SQL -Django -Rest Framework -JavaScript'}]
Giải trình -
Phương thức load[] trả về đối tượng trình tạo mà chúng tôi đã nhập vào danh sách để chúng tôi có thể truy cập bất kỳ phần tử nào. Trong các ví dụ trước, chúng ta đã học cách đọc tệp YAML. Bây giờ chúng ta sẽ tìm hiểu cách kết xuất dữ liệu vào tệp YAML
Viết tệp YAML bằng mô-đun PyYAML
Viết dữ liệu Python vào YAML được gọi là tuần tự hóa. Để kết xuất dữ liệu vào tệp yaml, chúng tôi sẽ sử dụng yaml. phương thức đổ []. Hãy hiểu ví dụ sau
Ví dụ -
đầu ra
Password: [email protected] Phone: 345464 Skills: - Python - SQL - Django - Rest Framework - JavaScript User: Zoey - name: Zaara occupation: Dentist
Giải trình -
Phương thức dump[] chuyển đổi các đối tượng Python thành định dạng YAML và ghi chúng vào tệp YAML. Chúng tôi đã làm tương tự trong ví dụ trên. Phương thức kết xuất [] nhận hai đối số - dữ liệu và luồng
Đối số dữ liệu đại diện cho đối tượng Python sẽ chuyển đổi thành luồng YAML. Tham số thứ hai là tệp phải là tệp văn bản hoặc tệp nhị phân. Dữ liệu luồng YAML được ghi bằng tên tệp đã cho;
Hãy hiểu ví dụ về ghi dữ liệu Python trong tệp
Ví dụ - 2
đầu ra
MớiChi tiết. khoai mỡ
- User: Zoey Password: [email protected] Phone: 345464 Skills: - Python - SQL - Django - Rest Framework - JavaScript - name: Zaara occupation: Dentist
Giải trình
Trong ví dụ trên, Đầu tiên, chúng tôi đã xác định từ điển Python sẽ được ghi trong tệp. Sau đó, chúng tôi đã mở các chi tiết mới. Tệp YAML ở chế độ ghi. Chúng tôi đã sử dụng phương thức dump[] và chuyển đối tượng dict Python bằng hai thẻ khác. Các thẻ này là -
- default_flow_style - Nó được sử dụng để hiển thị nội dung của khối lồng nhau với thụt đầu dòng thích hợp. Theo mặc định, nó là Đúng. Nếu chúng ta đặt giá trị của nó là false và giá trị bên trong danh sách lồng nhau được hiển thị theo kiểu dòng chảy, thì nó sẽ hiển thị nội dung của kiểu khối với thụt đầu dòng thích hợp
- sort_keys - Nó được sử dụng để sắp xếp các phím theo thứ tự bảng chữ cái. Theo mặc định, nó là Đúng. Nếu chúng tôi đặt giá trị của nó là sai, nó sẽ duy trì thứ tự chèn
Kết xuất nhiều tài liệu YAML
cây khoai mỡ. phương thức dump_all[] được sử dụng để kết xuất nhiều tài liệu YAML vào một luồng. Phương thức này lấy một danh sách hoặc trình tạo tạo ra các đối tượng Python được tuần tự hóa thành tài liệu YAML và đối số tùy chọn thứ hai dưới dạng tệp mở
Hãy hiểu ví dụ sau
Ví dụ -
đầu ra
Using dump[] method - Password: [email protected] Phone: 345464 Skills: - Python - SQL - Django - Rest Framework - JavaScript User: Zoey - name: Zaara occupation: Dentist Using dump_all[] method Password: [email protected] Phone: 345464 Skills: - Python - SQL - Django - Rest Framework - JavaScript User: Zoey --- name: Zaara occupation: Dentist
Các phím sắp xếp Python YAML
sort_keys là một thẻ tùy chọn được sử dụng khi kết xuất dữ liệu Python vào tệp. Nếu chúng ta đặt là True, Nó sẽ sắp xếp tất cả các khóa của tài liệu YAML theo thứ tự bảng chữ cái. Hãy hiểu ví dụ sau
Ví dụ -
đầu ra
import yaml from yaml.loader import FullLoader #open yaml file in read with open['sample.yaml', 'r'] as f: print["Before Sorting?.."] yaml_data = yaml.load[f, Loader=FullLoader] print[yaml_data] print["After Sorting......"] sorted_data = yaml.dump[yaml_data, sort_keys=True] print[sorted_data]
Định dạng tệp YAML
Mô-đun PyYaml cung cấp phương tiện để định dạng tệp YAML trong khi viết tài liệu YAML trong đó. Phương thức dump[] hỗ trợ các đối số định dạng khác nhau. Dưới đây là các đối số định dạng
Tham số -
- thụt lề - Nó giúp đặt thụt lề ưa thích
- chiều rộng - Nó giúp đặt chiều rộng ưa thích
- canonical=True - Nó buộc kiểu ưa thích cho vô hướng và bộ sưu tập
Hãy hiểu ví dụ sau -
Ví dụ -
đầu ra
Password: fire123 * Skills: -Python -SQL -Django -Rest Framework -JavaScript UserName: Antonio phone: 9879098
Lớp Python tùy chỉnh YAML có thể tuần tự hóa
Chúng ta có thể tạo lớp Python tùy chỉnh có thể chuyển đổi YAML thành một đối tượng Python tùy chỉnh thay vì danh sách hoặc các loại tích hợp sẵn
Hãy hiểu ví dụ sau -
Ví dụ -
đầu ra
Thẻ tùy chỉnh với PyYAML
Chúng tôi có thể tạo các thẻ tùy chỉnh theo yêu cầu của ứng dụng và gán giá trị mặc định cho các thẻ tùy chỉnh trong khi phân tích tệp YAML. Để làm như vậy, nó bao gồm các bước nhất định được đưa ra dưới đây
- Trong bước đầu tiên, chúng tôi xác định một hàm xây dựng lấy trình tải và nút YAML
- Chúng tôi gọi phương thức constuct_mapping[] trong hàm tạo đã tạo, phương thức này sẽ trả về một từ điển Python tương ứng với nút YAML. Nó sẽ trả về một hàm tạo với từ điển
- Hàm tạo được trả về sẽ được chuyển đến add_constructor[] để chuyển đổi biểu đồ biểu diễn YAML thành đối tượng Python gốc. Một hàm tạo lấy một thể hiện của Trình tải và một nút trả về các đối tượng Python
- Giờ đây, phương thức load[] có thể chấp nhận nhiều trường theo yêu cầu với cùng một thẻ tùy chỉnh được xác định trong add_constructor[]. Các trường không có giá trị sẽ được phân bổ các giá trị mặc định được xác định trong phương thức __init__[]
Hãy hiểu ví dụ sau
Ví dụ -
đầu ra
Bảng chuyển đổi trong Mô-đun PyYAML
Dưới đây là bảng mà mô-đun PyYAML sử dụng để chuyển đổi các đối tượng Python thành YAML tương đương. Phương thức kết xuất [] sử dụng dịch trong khi mã hóa
Thẻ YAML Loại Python. nullKhông có. boolbool. phao nổi. intInt. binarystr [byte trong Python3]. dấu thời gian Ngày giờ. ngày giờ. ô tô,. cặpDanh sách cặp. đặtBộ. danh sách tiếp theo. strstr hoặc unicode [str trong Python]. bản đồLỗi YAML
Trình phân tích cú pháp YAML đưa ra một ngoại lệ gọi là YAMLError trong trường hợp có bất kỳ lỗi nào. Với sự trợ giúp của lỗi này, chúng tôi có thể gỡ lỗi sự cố. Vì vậy, nên sử dụng mã tuần tự hóa YAML trong khối try-expect. Hãy hiểu ví dụ sau
Ví dụ -
mã thông báo
Mã thông báo thường được sử dụng trong các ứng dụng cấp thấp, chẳng hạn như đánh dấu cú pháp. Chúng tôi có thể tạo phương thức scan[] để tạo một bộ mã thông báo. Hãy hiểu ví dụ sau
Ví dụ -
đầu ra
________số 8
Python YAML sang XML
Dữ liệu YAML có thể được chuyển đổi sang định dạng XML bằng mô-đun XMLPlain. XML là tên viết tắt của eXtensible Markup Language sử dụng các thẻ HTML để định nghĩa các thẻ
Phương thức obj_from_yaml[] được sử dụng để tạo obj thuần XML từ luồng hoặc chuỗi YAML. Để giữ cho phần tử đối tượng đơn giản XML theo thứ tự, các luồng YAML được lưu trữ dưới dạng OrderDict
Hãy lấy tệp YAML mẫu có thông tin chi tiết về nhân viên và chuyển nó thành tệp XML
Ví dụ -
Hãy hiểu việc triển khai mã
Ví dụ -
Phần kết luận
Trong hướng dẫn này, chúng ta đã học được một số khái niệm quan trọng về các mô-đun YAML và PyYAML. Chúng tôi đã giới thiệu cách tạo thẻ tùy chỉnh, tải nội dung của tệp YAML vào chương trình Python của chúng tôi dưới dạng từ điển. Chúng tôi cũng đã thảo luận về cách thao tác với các tệp định dạng YAML. Hướng dẫn này được bao gồm khá ngắn gọn và chức năng cơ bản của thư viện