纯文本文件是程序员最喜欢使用的文件格式。 配置文件是用来对信息进行说明、存储的方式。 自有程序以来,配置文件也得到了很大的发展。
配置文件应该简洁,易于理解、编写,易于程序解析, 并且最好可以在不同的系统间交换。 由于纯文件文件本身并没有什么格式方面的约束, 为了用其作为配置文件,就需要设定一些约定, 以让程序能够识别关键词。
YAML 介绍
和GNU的递归命名风格类似,YAML也是一个自我指涉的缩写词(YAML Ain't Markup Language)。 但与GNU拒绝UNIX的理念不同,YAML的设计初衷是针对XML的复杂性提出更优雅的替代方案。 YAML之所以选择与XML分道扬镳,主要基于以下核心差异:
- YAML的可读性好。
- YAML和脚本语言的交互性好。
- YAML使用实现语言的数据类型。
- YAML有一个一致的信息模型。
- YAML易于实现。
上面5条也就是XML不足的地方。同时,YAML也有XML的下列优点:
- YAML可以基于流来处理;
- YAML表达能力强,扩展性好。
总之,YAML试图用一种比XML更敏捷的方式,来完成XML所完成的任务。 更多的内容及规范参见http://www.yaml.org。 YAML语法规则如下:
http://www.ibm.com/developerworks/cn/xml/x-cn-yamlintro/
http://www.yaml.org/
import yaml
import os
def get_yaml_data(yaml_file):
print("***获取yaml文件数据***")
file = open(yaml_file, 'r', encoding="utf-8")
file_data = file.read()
file.close()
print(file_data)
print("类型:", type(file_data))
print("***转化yaml数据为字典或列表***")
data = yaml.safe_load(file_data)
print(data)
print("类型:", type(data))
return data
current_path = os.path.abspath(".")
yaml_path = os.path.join(current_path, "/data/demo/yaml_demo.yaml")
get_yaml_data(yaml_path)
***获取yaml文件数据*** boolean: - TRUE #true,True都可以 - FALSE #false,False都可以 float: - 3.14 - 6.8523015e+5 #可以使用科学计数法 int: - 123 - 0b1010_0111_0100_1010_1110 #二进制表示 null: nodeName: 'node' parent: ~ #使用~表示null string: - 哈哈 - 'Hello world' #可以使用双引号或者单引号包裹特殊字符 - newline newline2 #字符串可以拆成多行,每一行会被转化成一个空格 date: - 2018-02-17 #日期必须使用ISO 8601格式,即yyyy-MM-dd datetime: - 2018-02-17T15:02:31+08:00 #时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区 类型: <class 'str'> ***转化yaml数据为字典或列表*** {'boolean': [True, False], 'float': [3.14, 685230.15], 'int': [123, 685230], None: {'nodeName': 'node', 'parent': None}, 'string': ['哈哈', 'Hello world', 'newline newline2'], 'date': [datetime.date(2018, 2, 17)], 'datetime': [datetime.datetime(2018, 2, 17, 15, 2, 31, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))]} 类型: <class 'dict'>
{'boolean': [True, False], 'float': [3.14, 685230.15], 'int': [123, 685230], None: {'nodeName': 'node', 'parent': None}, 'string': ['哈哈', 'Hello world', 'newline newline2'], 'date': [datetime.date(2018, 2, 17)], 'datetime': [datetime.datetime(2018, 2, 17, 15, 2, 31, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))]}
import yaml
from openpyxl import load_workbook
value=[]
table=[]
wb = load_workbook('xx_统计.xlsx')
sheet = wb.get_sheet_by_name('Data4')
for row in sheet.rows:
for cell in row:
value=[]
value.append(cell.value)
table.append(value)
print(yaml.dump(table,default_flow_style=True))
[[Jerry], ['33'], ["\u4EBA\u4E8B"], ["\u5973"], [null], [null], [null], [null], [ null], [null]]
/tmp/ipykernel_131/2837135202.py:6: DeprecationWarning: Call to deprecated function get_sheet_by_name (Use wb[sheetname]). sheet = wb.get_sheet_by_name('Data4')