Kết nối của YAML với Python là gì?

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

Thí 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

Thí 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

Thí 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

Thí 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

Thí 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 kết xuất () 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 -

Thí 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 -

Thí 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

Thí 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

Thí 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

Thí 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

Thí dụ -

Hãy hiểu việc triển khai mã

Thí 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

YAML hoạt động như thế nào trong Python?

YAML (YAML Ain't Markup Language) là ngôn ngữ tuần tự hóa dữ liệu mà con người có thể đọc được . Nó thường được sử dụng cho các tệp cấu hình, nhưng nó cũng được sử dụng trong lưu trữ dữ liệu (e. g. đầu ra gỡ lỗi) hoặc truyền (e. g. tiêu đề tài liệu).

Tại sao nên sử dụng YAML với Python?

YAML dễ dàng viết và đọc đối với con người, ngay cả đối với những người không phải là lập trình viên. Đồng thời, cũng dễ dàng phân tích cú pháp YAML, đặc biệt là với Python và thư viện PyYAML. Tính thân thiện với con người và dễ đọc là lợi thế lớn nhất của YAML so với các định dạng khác, như JSON và XML .

Làm cách nào để viết YAML bằng Python?

Viết tệp YAML bằng Python . In the write_yaml method, we open a file called toyaml. yml ở chế độ ghi và sử dụng phương thức kết xuất của gói YAML để ghi tài liệu YAML vào tệp. Lưu cấu hình. py và chạy tệp bằng lệnh bên dưới hoặc sử dụng biểu tượng phát trong IDE.

Làm cách nào để lấy dữ liệu từ tệp YAML trong Python?

Ví dụ đọc tệp Yaml mẫu .
Đầu tiên nhập mô-đun yaml bằng cách sử dụng câu lệnh nhập
Đọc tệp bằng phương pháp mở
phương thức safe_load đọc nội dung tệp và chuyển đổi nó thành đối tượng python từ điển
kèm theo tập tin đọc thử và mong đợi khối xử lý ngoại lệ