相关疑难解决方法(0)

yaml.dump在多行字符串中添加不需要的换行符

我有一个多行字符串:

>>> import credstash
>>> d = credstash.getSecret('alex_test_key', region='ap-southeast-2')
Run Code Online (Sandbox Code Playgroud)

要查看原始数据(前162个字符):

>>> credstash.getSecret('alex_test_key', region='ap-southeast-2')[0:162]
u'-----BEGIN RSA PRIVATE KEY-----\nMIIEogIBAAKCAQEA6oySC+8/N9VNpk0gJS7Gk8vn9sYN7FhjpAQnoHRqTN/Oaiyx\nxk2AleP2vXpojA/DHldT1JO+o3j56AHD+yfNFFeYvgWKDY35g49HsZZhbyCEAB45\n'
Run Code Online (Sandbox Code Playgroud)

和:

>>> print d[0:162]                                                                                                                                                                                          
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA6oySC+8/N9VNpk0gJS7Gk8vn9sYN7FhjpAQnoHRqTN/Oaiyx
xk2AleP2vXpojA/DHldT1JO+o3j56AHD+yfNFFeYvgWKDY35g49HsZZhbyCEAB45
Run Code Online (Sandbox Code Playgroud)

我写一个YAML文件:

>>> import yaml
>>> with open('foo.yaml', 'w') as f:                                                                                                                                                                        
...     yaml.dump(d, f, default_flow_style=False, explicit_start=True)
... 
Run Code Online (Sandbox Code Playgroud)

现在看起来像这样:

$ head -5 foo.yaml 
--- !!python/unicode '-----BEGIN RSA PRIVATE KEY-----

  MIIEogIBAAKCAQEA6oySC+8/N9VNpk0gJS7Gk8vn9sYN7FhjpAQnoHRqTN/Oaiyx

  xk2AleP2vXpojA/DHldT1JO+o3j56AHD+yfNFFeYvgWKDY35g49HsZZhbyCEAB45
Run Code Online (Sandbox Code Playgroud)

即每行有两个换行符。

现在,如果我将其读回到字符串中,则可以看到往返一切正常:

>>> with open('foo.yaml', 'r') as f:
...     d = yaml.load(f)
... 
>>> print d[0:162]
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA6oySC+8/N9VNpk0gJS7Gk8vn9sYN7FhjpAQnoHRqTN/Oaiyx
xk2AleP2vXpojA/DHldT1JO+o3j56AHD+yfNFFeYvgWKDY35g49HsZZhbyCEAB45
Run Code Online (Sandbox Code Playgroud)

(但是,我不明白为什么。)

我的真正问题是,如果人们阅读了此YAML文件,他们可能会像我一样假设我的程序破坏了私钥文件的格式。 …

python serialization pyyaml

5
推荐指数
1
解决办法
4277
查看次数

标签 统计

python ×1

pyyaml ×1

serialization ×1