Rumah >pembangunan bahagian belakang >Tutorial Python >Pengaturcaraan pelayan Python: Penghuraian format YAML menggunakan PyYAML

Pengaturcaraan pelayan Python: Penghuraian format YAML menggunakan PyYAML

WBOY
WBOYasal
2023-06-19 10:33:101860semak imbas

Pengaturcaraan pelayan Python: menggunakan PyYAML untuk penghuraian format YAML

Dengan perkembangan pesat teknologi Internet, pengaturcaraan pelayan menjadi semakin penting. Sebagai bahasa pengaturcaraan yang berkuasa, Python menjadi semakin popular di kalangan pembangun. PyYAML ialah salah satu penghurai format YAML yang paling biasa digunakan dalam Python. Artikel ini akan memperkenalkan cara menggunakan PyYAML untuk menghuraikan format YAML untuk membantu pembangun memprogramkan pelayan Python dengan lebih baik.

Apakah itu YAML?

YAML (Yet Another Markup Language) ialah format pertukaran data yang ringan Berbanding dengan format data seperti XML dan JSON, YAML ialah format yang lebih mudah dibaca dan ditulis. Data dalam format YAML boleh disiri dan dibaca serta difahami oleh manusia. YAML pada asalnya dibangunkan untuk menyelesaikan masalah XML yang menyusahkan dan sukar dibaca.

Contoh format YAML:

- name: Alice
  age: 25
  occupation: programmer
- name: Bob
  age: 30
  occupation: designer

Menggunakan PyYAML untuk menghuraikan format YAML

PyYAML ialah salah satu penghurai format YAML yang paling biasa digunakan dalam Python. Ia adalah penghurai YAML berciri penuh yang menyokong semua ciri teras YAML 1.1 dan 1.2. Sangat mudah untuk menggunakan PyYAML untuk menghuraikan format YAML Anda hanya perlu menukar data format YAML kepada objek Python melalui kaedah yaml.load().

import yaml

with open("data.yaml", 'r') as stream:
    data = yaml.load(stream)

print(data)

Kod di atas membaca dan menukar data format YAML dalam fail data.yaml kepada objek Python, dan akhirnya mencetak output.

Dalam PyYAML, anda juga boleh menggunakan kaedah yaml.dump() untuk menukar objek Python kepada data format YAML.

import yaml

data = [
    {'name': 'Alice', 'age': 25, 'occupation': 'programmer'},
    {'name': 'Bob', 'age': 30, 'occupation': 'designer'}
]

print(yaml.dump(data))

Kod di atas menukar senarai Python kepada data format YAML dan mencetak output.

Ciri lanjutan PyYAML

Selain penghuraian dan penyirian format YAML asas, PyYAML juga menyediakan banyak ciri lanjutan, termasuk penukaran jenis, penanda tersuai, pengesahan dan sambungan. Seterusnya, kita akan melihat beberapa ciri ini dengan lebih terperinci.

Penukaran jenis

PyYAML menyokong penukaran automatik data dalam format YAML kepada jenis terbina dalam Python, termasuk rentetan, integer, nombor titik terapung, kamus dan senarai, dsb. Sebagai contoh, baca data format YAML berikut ke dalam objek Python:

date: 2021-06-25
count: 300
price: 99.99

Semasa proses membaca, PyYAML akan menukar medan date secara automatik kepada objek datetime.date Python dan medan count kepada Python secara automatik Jenis integer, medan price ditukar kepada jenis titik terapung Python.

Teg tersuai

PyYAML menyokong teg tersuai, yang membolehkan anda menukar objek Python tersuai kepada data format YAML dan menukarnya kembali apabila membaca objek asal data YAML. Sebagai contoh, takrifkan kelas tersuai berikut:

import datetime

class CustomDate:
    def __init__(self, year, month, day):
        self.date = datetime.date(year, month, day)

Kemudian, kita boleh menggunakan kod berikut untuk menukar kelas tersuai ke dalam format YAML:

import yaml

def custom_date_representer(dumper, data):
    return dumper.represent_scalar('!CustomDate', '{}/{}/{}'.format(data.date.year, data.date.month, data.date.day))

def custom_date_constructor(loader, node):
    value = loader.construct_scalar(node)
    year, month, day = map(int, value.split('/'))
    return CustomDate(year, month, day)

data = [
    CustomDate(2021, 6, 25),
    CustomDate(2021, 6, 26)
]

yaml.add_representer(CustomDate, custom_date_representer)
yaml.add_constructor('!CustomDate', custom_date_constructor)

print(yaml.dump(data))

Dalam kod di atas, kami mendaftarkan teg tersuai !CustomDate, dan mentakrifkan kaedah representer dan constructor yang sepadan untuk menukar kelas tersuai ke dalam format YAML dan memulihkannya kepada objek asal.

Pengesahan dan sambungan

PyYAML juga menyediakan fungsi pengesahan dan sambungan, termasuk mengesahkan ketepatan data format YAML dan mendaftarkan teg baharu. Contohnya, anda boleh menggunakan kod berikut untuk mengesahkan ketepatan data format YAML:

import yaml

with open("data.yaml", 'r') as stream:
    try:
        data = yaml.safe_load(stream)
    except yaml.YAMLError as exc:
        print(exc)

Kod di atas menggunakan kaedah yaml.safe_load() untuk memuatkan data format YAML dan mengeluarkan maklumat yang sepadan berdasarkan ketepatan data .

Pada masa yang sama, anda juga boleh menggunakan kod berikut untuk mendaftar teg baharu:

import yaml

class CustomType:
    pass

def represent_custom_type(dumper, data):
    return dumper.represent_scalar('!CustomType', None)

yaml.add_representer(CustomType, represent_custom_type)

data = CustomType()

print(yaml.dump(data))

Dalam kod di atas, kami mendaftar kelas tersuai CustomType sebagai teg baharu !CustomType dan tentukan Kaedah representer yang sepadan menukarnya kepada data format YAML.

Ringkasan

Artikel ini memperkenalkan cara menggunakan PyYAML untuk menghuraikan dan mensiri format YAML, dan memperkenalkan beberapa ciri lanjutan PyYAML, termasuk penukaran jenis, teg tersuai, pengesahan dan sambungan, dsb. Melalui pengenalan artikel ini, saya percaya pembaca boleh mempunyai pemahaman yang lebih mendalam tentang penggunaan PyYAML dan mendapatkan aplikasi yang lebih baik dalam pengaturcaraan pelayan Python.

Atas ialah kandungan terperinci Pengaturcaraan pelayan Python: Penghuraian format YAML menggunakan PyYAML. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn