python读取yaml文件

需要用python读取yaml文件,在这里记录一下:

使用

安装并导入pyyaml模块

pip install pyyaml
import yaml

yaml文件格式如下:

#Default imu sensor yaml file
sensor_type: imu
comment: VI-Sensor IMU (ADIS16448)

# Sensor extrinsics wrt. the body-frame.
T_BS:
  cols: 4
  rows: 4
  data: [1.0, 0.0, 0.0, 0.0,
         0.0, 1.0, 0.0, 0.0,
         0.0, 0.0, 1.0, 0.0,
         0.0, 0.0, 0.0, 1.0]
rate_hz: 200

# inertial sensor noise model parameters (static)
gyroscope_noise_density: 1.6968e-04     # [ rad / s / sqrt(Hz) ]   ( gyro "white noise" )
gyroscope_random_walk: 1.9393e-05       # [ rad / s^2 / sqrt(Hz) ] ( gyro bias diffusion )
accelerometer_noise_density: 2.0000e-3  # [ m / s^2 / sqrt(Hz) ]   ( accel "white noise" )
accelerometer_random_walk: 3.0000e-3    # [ m / s^3 / sqrt(Hz) ].  ( accel bias diffusion )

指令很简单,只需要加入yaml读取:

def yaml_read(yaml_file):
        with open(yaml_file) as f:
            yaml_reader = yaml.load(f.read(), Loader=yaml.FullLoader)
        return yaml_reader

最后打印出结果,可以看出结果按照关键字检索,#注释内容不会读取,同时对于多行矩阵,按照括号范围进行读取

{'sensor_type': 'imu', 
'comment': 'VI-Sensor IMU (ADIS16448)', 
'T_BS': {'cols': 4, 'rows': 4, 'data': [1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]},
'rate_hz': 200, 
'gyroscope_noise_density': 0.00016968, 
'gyroscope_random_walk': 1.9393e-05, 
'accelerometer_noise_density': 0.002, 
'accelerometer_random_walk': 0.003}

报错处理

注意!!!
一开始未加入Loader=yaml.FullLoader会报错TypeError: load() missing 1 required positional argument: ‘Loader’

yaml.load(f.read())

查阅资料发现YAML 5.1版本后弃用了yaml.load(file),必须指定Loader

d1=yaml.load(file,Loader=yaml.FullLoader) #禁止执行任意函数
d1=yaml.safe_load(file)
d1 = yaml.load(file, Loader=yaml.CLoader)

你可能感兴趣的:(Python,python,开发语言)