PyYaml簡單介紹
- Python的PyYAML模塊是Python的YAML解析器和生成器
- 它有個版本分水嶺,就是5.1
讀取YAML5.1之前的讀取方法
def read_yaml(self, path): with open(path, encoding="utf-8") as f: result = f.read() result = yaml.load(result) return result
當你運行的時候,會報一個Warning
讀取YAML 5.1之后的讀取方法
因為在5.1之后,直接用load()已經過時了,需要在方法里面加一個 loader 的請求參數,如下:
def read_yaml(self, path): with open(path, encoding="utf-8") as f: result = f.read() result = yaml.load(result, Loader=yaml.FullLoader) #loader可選擇BaseLoader、SafeLoader、FullLoader、UnsafeLoader return result
也可以,根據Python語法糖轉換,如下:
def read_yaml(self, path): with open(path, encoding="utf-8") as f: result = f.read() result = yaml.full_load(result) return result
針對不同的需要,加載器有如下幾種類型:
- BaseLoader:僅加載最基本的YAML
- SafeLoader:安全地加載YAML語言的子集。建議用於加載不受信任的輸入。(safe_load)
- FullLoader:加載完整的YAML語言。避免任意代碼執行。這是當前(PyYAML 5.1)默認加載器調用 yaml.load(input) (發出警告后)(full_load)
- UnsafeLoader(也稱為
Loader
向后兼容性):原始的Loader代碼,可以通過不受信任的數據輸入輕松利用。(unsafe_load)
存儲數據到YAML的方法
with open(path, "w", encoding="utf-8") as f: yaml.dump(data, f, Dumper=yaml.SafeDumper) # 可選BaseDumper、SafeDumper
封裝成一個操作YAML的工具類
class YamlUtil: __instance = None def __new__(cls, *args, **kwargs): if not cls.__instance: print("YamlUtil first init") cls.__instance = super(YamlUtil, cls).__new__(cls, *args, **kwargs) return cls.__instance def read_yaml(self, path): with open(path, encoding="utf-8") as f: result = f.read() result = yaml.load(result, Loader=yaml.FullLoader) return result def write_yaml(self, path, data): with open(path, "w", encoding="utf-8") as f: yaml.dump(data, f, Dumper=yaml.SafeDumper)
yamlUtil = YamlUtil()