2011-11-14 44 views
60

Tôi mới sử dụng YAML và đang tìm cách phân tích cú pháp tệp YAML và sử dụng/truy cập dữ liệu từ YAML được phân tích cú pháp.Phân tích cú pháp tệp YAML bằng Python và truy cập dữ liệu?

Tôi đã đi qua những giải thích về cách phân tích các file YAML, ví dụ, PyYAML tutorial, "How can I parse a YAML file in Python", "Convert Python dict to object?", nhưng những gì tôi đã không tìm thấy là một ví dụ đơn giản về cách để truy cập dữ liệu từ tệp YAML được phân tích cú pháp.

Giả sử tôi có một file YAML như:

treeroot: 
    branch1: branch1 text 
    branch2: branch2 text 

Làm thế nào để truy cập vào nội dung "branch1 văn bản"?

"YAML parsing and Python?" cung cấp giải pháp, nhưng tôi gặp sự cố khi truy cập dữ liệu từ tệp YAML phức tạp hơn. Và, tôi tự hỏi liệu có một số cách tiêu chuẩn để truy cập dữ liệu từ tệp YAML được phân tích cú pháp, có thể giống như ký hiệu "tree iteration" hoặc "elementpath" hoặc thứ gì đó sẽ được sử dụng khi phân tích tệp XML?

+0

Có thể trùng lặp [Làm cách nào để phân tích cú pháp tệp YAML bằng Python] (https://stackoverflow.com/questions/1773805/how-can-i-parse-a-yaml-file-in-python) – fmsf

Trả lời

117

Vì PyYAML's yaml.load() chức năng phân tích tài liệu YAML thành cấu trúc dữ liệu Python gốc, bạn chỉ có thể truy cập các mục theo khóa hoặc chỉ mục. Sử dụng ví dụ từ câu hỏi mà bạn liên kết:

import yaml 
with open('tree.yaml', 'r') as f: 
    doc = yaml.load(f) 

Để truy cập branch1 text bạn sẽ sử dụng:

txt = doc["treeroot"]["branch1"] 
print txt 
"branch1 text" 

bởi vì, trong tài liệu YAML của bạn, giá trị của khóa branch1 là dưới phím treeroot.

+2

I nhận được "TypeError: chuỗi chỉ số phải là số nguyên, không phải str". Có vẻ như tôi không thể sử dụng chuỗi cho chỉ mục. – sattu

+0

Bạn có thể đang cố gắng truy cập (chỉ mục vào) một chuỗi. Bạn có thể đi quá sâu; bạn đã ở phần tử bạn đang cố gắng truy cập chưa? – Aphex

+0

@sattu Tôi đã có lỗi tương tự vì tôi không có bất kỳ dấu cách nào giữa khóa và giá trị, tức là "ghi nhãn: 20" thay vì "ghi nhãn: 20" – mateuszb

Các vấn đề liên quan