YAML Ain't Markup Language [YAML] là ngôn ngữ tuần tự hóa dữ liệu cho hầu hết các ngôn ngữ lập trình. Hãy hiểu chi tiết
YAML một siêu bộ JSON nghiêm ngặt, vì vậy mọi thứ được viết bằng JSON đều có thể được phân tích cú pháp thành YAML. Nó chủ yếu được sử dụng cho các tệp cấu hình trong các dự án và nó cực kỳ dễ hiểu và dễ đọc mã
Phần mở rộng tệp cho các tệp YAML là
Key: Value
integer: 123
float: 123.123
exponential_float: 1340.0
0 hoặc Key: Value
integer: 123
float: 123.123
exponential_float: 1340.0
1Trong hướng dẫn này, chúng ta sẽ tìm hiểu về các loại dữ liệu khác nhau có trong YAML và làm việc với YAML trong Python. Đến cuối hướng dẫn này, bạn sẽ có thể hiểu YAML và cú pháp của nó
Tôi cho rằng bạn đã quen thuộc với Python nếu không xem tài nguyên học tập Python
YAML tuân theo cú pháp thụt lề tương tự như Python. Tuy nhiên, nó không cho phép tab [nhớ nó trong khi viết tệp YAML] để thụt đầu dòng
Cài đặt
- Cài đặt mô-đun Python có tên là
2 để hoạt động với các tệp YAMLKey: Value integer: 123 float: 123.123 exponential_float: 1340.0
pip install pyyaml
- Sao chép và dán đoạn mã sau vào một tệp và lưu nó với tên
3Key: Value integer: 123 float: 123.123 exponential_float: 1340.0
import yaml
yaml_file = open["learn_yaml.yaml", 'r']
yaml_content = yaml.load[yaml_file]
print["Key: Value"]
for key, value in yaml_content.items[]:
print[f"{key}: {value}"]
- Chúng tôi sẽ sử dụng tập lệnh trên để chuyển đổi mã YAML sang Python và kiểm tra các loại dữ liệu khác nhau
- Tạo một tệp có tên
4 và thực hành các ví dụ khác nhau trong đó, mà chúng ta sẽ thảo luận trong hướng dẫn nàyKey: Value integer: 123 float: 123.123 exponential_float: 1340.0
Không có gì khó chịu, hãy chuyển sang phần kiểu dữ liệu của YAML
Kiểu dữ liệu trong YAML
Mọi thứ trong YAML là một cặp khóa-giá trị
Chúng tôi có một tên khác cho các cặp khóa-giá trị trong các ngôn ngữ lập trình khác nhau như từ điển, hàm băm, đối tượng, v.v. , Đây là những khối xây dựng của YAML
Các khóa có thể là chuỗi [được trích dẫn hoặc bình thường], số float hoặc số nguyên [Hỗ trợ có thể thay đổi trong bản cập nhật trong tương lai]. Và các giá trị có thể thuộc bất kỳ loại dữ liệu nào mà YAML hỗ trợ
Hãy xem các loại dữ liệu khác nhau được trình bày trong YAML
Số
YAML hỗ trợ số nguyên, số thực và số thực theo cấp số nhân
integer: 123
float: 123.123
exponential_float: 1.34e+3
Khi bạn đánh giá đoạn mã trên bằng tập lệnh Python, bạn sẽ nhận được kết quả như sau
Key: Value
integer: 123
float: 123.123
exponential_float: 1340.0
Chúng ta có thể biểu diễn các giá trị trong các hệ thống số khác nhau như thập phân, bát phân và thập lục phân
- Số không [0] đứng đầu đại diện cho nó là một số bát phân
- Tiền tố 0x đại diện cho giá trị thập lục phân của nó
Xem ví dụ bên dưới
integer: 123
octal: 0123
hexa: 0x123
Chúng ta có thể thấy các giá trị thập phân đã chuyển đổi của giá trị bát phân và thập lục phân bằng cách chạy tập lệnh Python của mình. Bạn sẽ thấy đầu ra chính xác như sau
Key: Value
integer: 123
octal: 83
hexa: 291
Một điều thú vị khác về YAML là chúng ta có thể đại diện cho NAN [Không phải là số] và Infinity
not_a_number: .NAN
infinity: .inf
negative_infinity: -.inf
Chạy tập lệnh Python, bạn sẽ thấy các giá trị được chuyển đổi của NAN và inf sang Python
Key: Value
not_a_number: nan
infinity: inf
negative_infinity: -inf
Đó là nó cho các loại số trong YAML
Dây
Các chuỗi trong YAML có thể được biểu diễn có hoặc không có dấu ngoặc kép. Cả hai đều giống nhau. Không giống như JSON, không có quy tắc nghiêm ngặt nào để đặt mọi chuỗi trong dấu ngoặc kép. Nhưng, nếu chúng ta cần sử dụng các chuỗi thoát, thì chúng ta phải sử dụng dấu ngoặc kép
Hãy xem một số ví dụ về chuỗi
string: Hi, there I am a string
string with escape character: Hi, I am a newline \n character. And I am not working :[
string with working escape character: "Hi, I am a newline \n character. And I am working :]"
Ký tự dòng mới trong phần cặp khóa-giá trị hoạt động như mong đợi. Như chúng tôi đã nói, chúng tôi cần sử dụng dấu ngoặc kép để làm việc với chuỗi thoát
Chúng tôi đã sử dụng dấu ngoặc kép trong cặp khóa-giá trị tiếp theo và nó hoạt động như mong đợi. Diễn giải mã YAML ở trên bằng tập lệnh Python của chúng tôi. Bạn sẽ nhận được kết quả như sau
Key: Value
string: Hi, there I am a string
string with escape character: Hi, I am a newline \n character. And I am not working :[
string with working escape character: Hi, I am a newline
character. And I am working :]
Có hai ký tự đặc biệt trong YAML mà chúng ta có thể sử dụng để viết nhiều câu làm giá trị cho khóa. Giả sử chúng ta phải chia một câu dài thành nhiều dòng. Trong loại kịch bản này, chúng ta có thể sử dụng một nếp gấp [lớn hơn >] hoặc khối [đường ống. ] ký tự để viết nhiều dòng
Sự khác biệt giữa các ký tự gấp và khối là gì?
Ký tự gấp sẽ không diễn giải các dòng mới, trong khi ký tự khối thì có
Hãy xem các ví dụ
import yaml
yaml_file = open["learn_yaml.yaml", 'r']
yaml_content = yaml.load[yaml_file]
print["Key: Value"]
for key, value in yaml_content.items[]:
print[f"{key}: {value}"]
0Chạy script Python thì bạn sẽ thấy sự khác biệt giữa ký tự fold và block. Và đừng quên sử dụng thụt đầu dòng
import yaml
yaml_file = open["learn_yaml.yaml", 'r']
yaml_content = yaml.load[yaml_file]
print["Key: Value"]
for key, value in yaml_content.items[]:
print[f"{key}: {value}"]
1Booleans
Trong YAML, chúng ta có thể biểu diễn giá trị boolean Đúng và Sai theo ba cách khác nhau. Nhìn họ kìa
- Các giá trị True, On và Yes được coi là True trong YAML
- Các giá trị Sai, Tắt và Không được coi là Sai trong YAML
import yaml
yaml_file = open["learn_yaml.yaml", 'r']
yaml_content = yaml.load[yaml_file]
print["Key: Value"]
for key, value in yaml_content.items[]:
print[f"{key}: {value}"]
2Nếu bạn diễn giải mã YAML ở trên, thì bạn sẽ nhận được 3 giá trị khóa đầu tiên là True và 3 giá trị khóa tiếp theo là Sai
import yaml
yaml_file = open["learn_yaml.yaml", 'r']
yaml_content = yaml.load[yaml_file]
print["Key: Value"]
for key, value in yaml_content.items[]:
print[f"{key}: {value}"]
3Vô giá trị
YAML hỗ trợ giá trị null tương tự như JSON. Chúng ta có thể sử dụng từ khóa null hoặc ký hiệu dấu ngã [~] để xác định giá trị null trong YAML. YAML có các lựa chọn thay thế khá phải không?
import yaml
yaml_file = open["learn_yaml.yaml", 'r']
yaml_content = yaml.load[yaml_file]
print["Key: Value"]
for key, value in yaml_content.items[]:
print[f"{key}: {value}"]
4Chạy tập lệnh Python. Bạn sẽ nhận được cả hai giá trị là Không vì Python sử dụng Không thay vì từ khóa null
import yaml
yaml_file = open["learn_yaml.yaml", 'r']
yaml_content = yaml.load[yaml_file]
print["Key: Value"]
for key, value in yaml_content.items[]:
print[f"{key}: {value}"]
5Mảng
Chúng ta có thể chỉ định các mảng tương tự như Python trong YAML. Hoặc chúng ta có thể viết tất cả các phần tử của mảng trong các dòng riêng biệt trước dấu gạch nối [-]. Hãy xem một ví dụ cho mỗi đại diện
import yaml
yaml_file = open["learn_yaml.yaml", 'r']
yaml_content = yaml.load[yaml_file]
print["Key: Value"]
for key, value in yaml_content.items[]:
print[f"{key}: {value}"]
6Trong mã YAML ở trên, chúng tôi đã sử dụng dấu ngoặc vuông tương tự như danh sách Python. Hãy xem một cách khác để biểu diễn mảng trong YAML [trông giống như danh sách đánh dấu]
import yaml
yaml_file = open["learn_yaml.yaml", 'r']
yaml_content = yaml.load[yaml_file]
print["Key: Value"]
for key, value in yaml_content.items[]:
print[f"{key}: {value}"]
7Nếu bạn sử dụng tập lệnh Python của chúng tôi để diễn giải các ví dụ trên. Bạn sẽ nhận được đầu ra như sau
import yaml
yaml_file = open["learn_yaml.yaml", 'r']
yaml_content = yaml.load[yaml_file]
print["Key: Value"]
for key, value in yaml_content.items[]:
print[f"{key}: {value}"]
6Chúng tôi có thể có từ điển trong danh sách không chỉ chuỗi, số, v.v. ,
import yaml
yaml_file = open["learn_yaml.yaml", 'r']
yaml_content = yaml.load[yaml_file]
print["Key: Value"]
for key, value in yaml_content.items[]:
print[f"{key}: {value}"]
9Bạn sẽ nhận được một loạt các từ điển nếu bạn diễn giải mã YAML ở trên bằng tập lệnh Python của chúng tôi
integer: 123
float: 123.123
exponential_float: 1.34e+3
0từ điển
Chúng ta đã thấy cú pháp của từ điển trong các ví dụ trên. Để nhanh chóng tóm tắt từ điển là các cặp khóa-giá trị. Chúng tôi có thể có bất kỳ loại dữ liệu hợp lệ nào làm giá trị cho khóa. YAML thậm chí còn hỗ trợ các từ điển lồng nhau
Hãy xem một ví dụ
integer: 123
float: 123.123
exponential_float: 1.34e+3
1Diễn giải đoạn code trên bạn sẽ thấy kết quả tương tự như sau
integer: 123
float: 123.123
exponential_float: 1.34e+3
2Bạn có biết bạn có thể chuyển đổi danh sách thành từ điển trong Python không?
Bố trí
YAML hỗ trợ một loại dữ liệu khác được gọi là tập hợp. Tập hợp chứa các giá trị duy nhất tương tự như kiểu dữ liệu tập hợp của Pythons. Các mục của tập hợp được đặt trước dấu chấm hỏi [?] giống như các mục danh sách được đặt trước dấu gạch nối [-]
Chúng ta cần đề cập rằng kiểu dữ liệu được đặt bằng cách sử dụng. đặt sau tên đặt
Nhìn vào ví dụ sau
integer: 123
float: 123.123
exponential_float: 1.34e+3
3Vì tập hợp chỉ chứa các giá trị duy nhất, bạn sẽ không nhận được 2 hai lần khi diễn giải mã YAML ở trên bằng tập lệnh Python của chúng tôi
Hãy xem kết quả
integer: 123
float: 123.123
exponential_float: 1.34e+3
4Ta cũng có thể biểu diễn tập hợp tương tự như cú pháp Python như sau
integer: 123
float: 123.123
exponential_float: 1.34e+3
5Bạn sẽ nhận được kết quả chính xác như ví dụ trên
Đó là nó cho các loại dữ liệu trong YAML. Hãy xem một số tính năng bổ sung trong YAML
YAML hỗ trợ bình luận. Thật tuyệt vời. Chúng tôi có thể viết nhận xét trong YAML bắt đầu bằng ký hiệu băm [#]
integer: 123
float: 123.123
exponential_float: 1.34e+3
6Nếu bạn diễn giải mã YAML ở trên, thì bạn sẽ nhận được một khóa trống có giá trị null
integer: 123
float: 123.123
exponential_float: 1.34e+3
7YAML không hỗ trợ nhận xét nhiều dòng. Chúng tôi phải viết nhiều dòng bắt đầu bằng một hàm băm cho các nhận xét nhiều dòng tương tự như Python
mỏ neo
Các neo cho phép chúng tôi sao chép nội dung của một khóa bất cứ nơi nào chúng tôi muốn trong toàn bộ tài liệu. Điều này rất tiện lợi nếu bạn muốn sao chép một số nội dung trong tài liệu
Để sử dụng anchor chúng ta phải đặt tên cho nó như một tên biến trong các ngôn ngữ lập trình. Và sau đó chúng tôi có thể sử dụng nó trên tài liệu bất cứ nơi nào chúng tôi muốn
Chúng ta có thể xác định tên neo bằng cách sử dụng & và sử dụng nó với *. Hãy xem một ví dụ
integer: 123
float: 123.123
exponential_float: 1.34e+3
8Trong ví dụ trên, chúng tôi đã sử dụng một ký tự trùng lặp dữ liệu để sao chép giá trị của khóa dữ liệu. Cả hai khóa đều chứa các giá trị giống nhau nếu bạn diễn giải YAML ở trên
integer: 123
float: 123.123
exponential_float: 1.34e+3
9Phần kết luận
Tôi hy vọng bạn đã hiểu rõ về YAML. Bây giờ, bạn có thể sử dụng YAML trong tệp cấu hình dự án tiếp theo của mình. Bạn có thể tham khảo trang web chính thức của YAML để có được những thứ nâng cao hơn