Yaml kết xuất Python

YAML, từ viết tắt đệ quy của “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 cũng có thể được sử dụng để trao đổi dữ liệu. Trình phân tích cú pháp YAML của python được sử dụng nhiều nhất là PyYAML, một thư viện cho phép bạn tải, phân tích cú pháp và viết YAML, giống như thư viện JSON của Python giúp bạn làm việc với JSON

Bài viết này hướng dẫn bạn cách tải, đọc và ghi các tệp YAML bằng PyYAML. Ngoài ra, bạn sẽ tìm hiểu cách cài đặt nó trên hệ thống của mình và cách YAML so sánh với các lựa chọn thay thế như JSON

Mục lục

YAML là gì?

Biểu tượng YAML

Theo trang web chính thức [1], YAML là ngôn ngữ tuần tự hóa dữ liệu thân thiện với con người cho tất cả các ngôn ngữ lập trình. YAML thường được sử dụng cho các tệp cấu hình, nhưng nó cũng được sử dụng để trao đổi dữ liệu

YAML rất dễ 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 của nó 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

Đây là những tính năng nổi bật nhất của YAML

  • Bạn có thể sử dụng nhận xét trong tệp YAML
  • Bạn có thể lưu trữ nhiều tài liệu trong một tệp YAML, với dấu tách ---. Một tính năng thường được sử dụng trong định nghĩa Kubernetes
  • Thật dễ dàng để đọc cho con người
  • Thật dễ dàng để phân tích cú pháp cho máy tính

1] Sự thật thú vị, trang web YAML chính thức được viết dưới dạng các tệp YAML hợp lệ

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

Nếu bạn hỏi tôi, YAML là lựa chọn hoàn hảo cho các tệp cấu hình. Đó chính xác là cách tôi và nhiều nhà phát triển khác sử dụng nó nhiều nhất. Những người khác dường như đồng ý, vì nhiều dự án lớn, như Docker và Kubernetes, sử dụng YAML để xác định triển khai. Nó có cú pháp phong phú hơn so với cách thay thế thường được sử dụng,. ini, nhưng vẫn đẹp mắt và đơn giản để viết và phân tích cú pháp

Tuy nhiên, có một số nhược điểm khi sử dụng YAML với Python

  • YAML không phải là một phần của thư viện Python tiêu chuẩn, trong khi XML và JSON là
  • Sự phụ thuộc của nó vào thụt đầu dòng đôi khi gây khó chịu [tuy nhiên, các nhà phát triển Python đã quen với điều đó, phải không?]
  • Có lẽ nó hơi quá linh hoạt đối với các trường hợp sử dụng đơn giản, như trao đổi dữ liệu của các đối tượng đơn giản

Nếu bạn đang tìm kiếm một định dạng dữ liệu tốt để trao đổi và lưu trữ dữ liệu, tôi khuyên dùng JSON, XML hoặc các định dạng khác hiệu quả hơn như bộ đệm giao thức và Avro

Cài đặt và nhập PyYAML

Có nhiều gói Python có thể phân tích dữ liệu YAML. Tuy nhiên, PyYAML là triển khai phổ biến nhất và cũng là triển khai đầy đủ nhất để phân tích cú pháp YAML. PyYAML không phải là một phần của thư viện Python tiêu chuẩn, nghĩa là bạn cần cài đặt nó với Pip. Sử dụng lệnh sau để cài đặt PyYAML, tốt hơn là trong môi trường ảo

$ pip install pyyaml

Trên một số hệ thống, bạn cần sử dụng pip3

$ pip3 install pyyaml

Để sử dụng PyYAML trong tập lệnh của bạn, hãy nhập mô-đun như sau. Lưu ý rằng bạn không nhập 'pyyaml' mà chỉ nhập 'yaml'

import yaml

Đọc và phân tích tệp YAML bằng Python

Khi chúng tôi đã nhập trình phân tích cú pháp YAML, chúng tôi có thể tải tệp YAML và phân tích cú pháp tệp đó. Các tệp YAML thường mang phần mở rộng

$ pip3 install pyyaml
0 hoặc
$ pip3 install pyyaml
1. Hãy làm việc với tệp YAML ví dụ sau, được gọi là
$ pip3 install pyyaml
2

rest:
  url: "//example.org/primenumbers/v1"
  port: 8443

prime_numbers: [2, 3, 5, 7, 11, 13, 17, 19]

Việc tải, phân tích cú pháp và sử dụng tệp cấu hình này rất giống với việc tải JSON bằng thư viện JSON của Python. Đầu tiên, chúng tôi mở tập tin. Tiếp theo, chúng tôi phân tích cú pháp bằng hàm

$ pip3 install pyyaml
3. Xin lưu ý rằng tôi đã thay đổi đầu ra một chút để bạn dễ đọc hơn

________số 8_______

Trình phân tích cú pháp YAML trả về một đối tượng Python thông thường phù hợp nhất với dữ liệu. Trong trường hợp này, đó là từ điển Python. Điều này có nghĩa là tất cả các tính năng từ điển thông thường đều có thể được sử dụng, chẳng hạn như sử dụng

$ pip3 install pyyaml
4 với giá trị mặc định

Đây là ví dụ tương tự, nhưng có tính tương tác, vì vậy bạn có thể tự mình thử nghiệm điều này

Phân tích chuỗi YAML bằng Python

Bạn có thể sử dụng

$ pip3 install pyyaml
3 để phân tích tất cả các loại chuỗi YAML hợp lệ. Đây là một ví dụ phân tích danh sách các mục đơn giản thành danh sách Python

>>> import yaml
>>>
>>> names_yaml = """
.. - 'eric'
.. - 'justin'
.. - 'mary-kate'
.. """
>>>
>>> names = yaml.safe_load[names_yaml]
>>> names
['eric', 'justin', 'mary-kate']

Phân tích tệp với nhiều tài liệu YAML

YAML cho phép bạn xác định nhiều tài liệu trong một tệp, phân tách chúng bằng dấu gạch ngang ba lần [---]. PyYAML cũng sẽ vui vẻ phân tích cú pháp các tệp đó và trả về danh sách tài liệu. Bạn có thể làm như vậy bằng cách sử dụng hàm 

$ pip3 install pyyaml
7. Hàm này trả về một trình tạo sẽ lần lượt trả về tất cả các tài liệu, từng cái một

Lưu ý rằng tệp cần được mở miễn là bạn đang đọc tài liệu từ YAML, vì vậy bạn phải thực hiện quá trình xử lý của mình trong khoản 

$ pip3 install pyyaml
8 . Đây là một ví dụ tương tác thể hiện chức năng này

Viết [hoặc kết xuất] YAML vào một tệp

Mặc dù hầu hết sẽ chỉ đọc YAML dưới dạng tệp cấu hình, nhưng cũng có thể rất tiện để viết YAML. Các trường hợp sử dụng ví dụ có thể là

  • Tạo một tệp cấu hình ban đầu với các cài đặt hiện tại cho người dùng của bạn
  • Để lưu trạng thái chương trình của bạn trong một tệp dễ đọc [thay vì sử dụng thứ gì đó như Pickle]

Trong ví dụ sau, chúng ta sẽ

  • Tạo một danh sách có tên như chúng ta đã làm trước đây
  • Lưu tên vào tệp có định dạng YAML với
    $ pip3 install pyyaml
    9
  • Đọc và in tệp, làm bằng chứng cho thấy mọi thứ hoạt động như mong đợi

của bạn đây

Đây là mã giống như một ví dụ không tương tác

import yaml

names_yaml = """
- 'eric'
- 'justin'
- 'mary-kate'
"""

names = yaml.safe_load[names_yaml]

with open['names.yaml', 'w'] as file:
    yaml.dump[names, file]

print[open['names.yaml'].read[]]
- eric
- justin
- mary-kate

Chuyển đổi YAML sang JSON bằng Python

Nếu bạn cần chuyển đổi YAML sang JSON, bạn chỉ cần phân tích cú pháp YAML như chúng tôi đã làm ở trên. Trong bước tiếp theo, bạn có thể sử dụng mô-đun JSON để chuyển đổi đối tượng thành JSON

Trong ví dụ này, chúng tôi mở tệp cấu hình dựa trên YAML, phân tích cú pháp tệp đó bằng PyYAML, sau đó ghi tệp đó vào tệp JSON bằng mô-đun JSON

Đây là mã giống như một ví dụ không tương tác

import yaml
import json

with open['config.yml', 'r'] as file:
    configuration = yaml.safe_load[file]

with open['config.json', 'w'] as json_file:
    json.dump[configuration, json_file]

Chuyển đổi JSON sang YAML

Để hoàn thiện, hãy làm ngược lại. chuyển đổi JSON sang YAML

Cách chuyển đổi JSON sang YAML bằng Python

PyYAML safe_load[] so với tải[]

Bạn sẽ bắt gặp nhiều ví dụ về cách sử dụng PyYAML trong đó

import yaml
0 được sử dụng thay vì
import yaml
1. Tôi cố tình không nói với bạn về chức năng
import yaml
0 cho đến bây giờ. Vì hầu hết mọi người đều có việc phải làm và có xu hướng sao chép-dán nhanh một số mã ví dụ, nên tôi muốn họ sử dụng phương pháp phân tích cú pháp YAML an toàn nhất bằng Python

Tuy nhiên, nếu bạn tò mò về sự khác biệt giữa hai điều này, thì đây là bản tóm tắt ngắn.

import yaml
0 là một chức năng rất mạnh mẽ, giống như dưa chua, nếu bạn biết chức năng đó. Cả hai đều là những phương pháp rất không an toàn vì chúng cho phép kẻ tấn công thực thi mã tùy ý. Chức năng tải của PyYAML cho phép bạn tuần tự hóa và giải tuần tự hóa các đối tượng Python hoàn chỉnh và thậm chí thực thi mã Python, bao gồm các lệnh gọi đến thư viện
import yaml
4, có thể thực thi bất kỳ lệnh nào trên hệ thống của bạn

Trong các phiên bản PyYAML gần đây, hàm

import yaml
0 không được dùng nữa và sẽ đưa ra cảnh báo nghiêm trọng khi bạn sử dụng hàm này theo cách không an toàn

Nếu bạn đang phân tích cú pháp các tệp YAML thông thường, giống như 99% chúng tôi làm, thì bạn phải luôn sử dụng

import yaml
1, vì nó chỉ chứa một tập hợp con của hàm tải. Tất cả các loại công cụ thực thi mã tùy ý, đáng sợ đều bị loại bỏ

Làm cách nào để tạo tệp YAML trong Python?

Viết tệp YAML bằng Python . py và thêm các dòng mã sau ngay bên dưới phương thức read_yaml và phía trên khối chính của tệp Open config.py and add the following lines of code just below the read_yaml method and above the main block of the file . Trong phương thức write_yaml, chúng tôi mở một tệp có tên là 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àm cách nào để lấy dữ liệu từ tệp YAML trong Python?

Chúng tôi có thể đọc tệp YAML bằng cách sử dụng yaml của mô-đun PyYAML. hàm tải[] . Hàm này phân tích cú pháp và chuyển đổi đối tượng YAML thành từ điển Python [ đối tượng dict]. Quá trình này được gọi là Deserializing YAML thành Python.

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

Cài đặt và nhập PyYAML .
$ pip cài đặt pyyaml. $ pip cài đặt pyyaml. Trên một số hệ thống, bạn cần sử dụng pip3
$ pip3 cài đặt pyyaml. $ pip3 cài đặt pyyaml. Để sử dụng PyYAML trong tập lệnh của bạn, hãy nhập mô-đun như sau. .
nhập yaml. nhập yaml. Đọc và phân tích tệp YAML bằng Python

YAML có được tích hợp vào Python không?

Tuy nhiên, Python thiếu hỗ trợ tích hợp cho định dạng dữ liệu YAML , thường được sử dụng để cấu hình và tuần tự hóa, mặc dù có sự tương đồng rõ ràng giữa hai định dạng này .

Chủ Đề