我正在尝试下载PyYAML并按照此处的说明进行安装http://pyyaml.org/wiki/PyYAML
所以我下载了ZIP包:http://pyyaml.org/download/pyyaml/PyYAML-3.11.zip然后cd进入该文件夹并运行python setup.py --with-libyaml install
,我得到的错误信息是ext/_yaml.h:2:10: fatal error: 'yaml.h' file not found
但我检查了PyYAML-3.11文件夹,yaml.h就在那里......
更新:我在http://sandlininc.com/?p=500尝试了这些方法
$ sudo easy_install pip
$ brew install libyaml
$ sudo easy_install setuptools
$ pip install -U PyYAML
然后我python setup.py --with-libyaml install
再试一次.我收到消息错误:/ Library /Python/2.7/site-packages/_yaml.so:权限被拒绝
我错过了什么吗?为什么许可被拒绝?谢谢!
我正在使用YAML数据生成文档生成器,该数据将指定生成每个项目的YAML文件的哪一行.做这个的最好方式是什么?所以,如果YAML文件是这样的:
- key1: item 1
key2: item 2
- key1: another item 1
key2: another item 2
Run Code Online (Sandbox Code Playgroud)
我想要这样的东西:
[
{'__line__': 1, 'key1': 'item 1', 'key2': 'item 2'},
{'__line__': 3, 'key1': 'another item 1', 'key2': 'another item 2'},
]
Run Code Online (Sandbox Code Playgroud)
我目前正在使用PyYAML,但是如果我可以从Python中使用它,那么任何其他库都可以.
我有一个some.yaml
包含以下内容的文件.
init_config: {}
instances:
- host: <IP>
username: <username>
password: <password>
Run Code Online (Sandbox Code Playgroud)
应该如下解析和更新yaml文件.
init_config: {}
instances:
- host: 1.2.3.4
username: Username
password: Password
Run Code Online (Sandbox Code Playgroud)
如何解析值并适当更新它们?
我正在使用PyYaml从我自己的python对象创建Yaml文档.例如我的对象:
class MyObj(object):
name = "boby"
age = 34
Run Code Online (Sandbox Code Playgroud)
变为:
boby:
age: 34
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.
但我还没有找到一种方法以编程方式向生成的yaml添加注释,因此它看起来像:
boby: # this is the name
age: 34 # in years
Run Code Online (Sandbox Code Playgroud)
看看PyYaml文档以及代码,我发现没办法这样做.
有什么建议?
我试图在python中创建一个yaml序列,创建一个自定义的python对象.该对象需要使用之后解构的dicts和列表构建__init__
.但是,似乎construct_mapping函数不构造嵌入序列(列表)和dicts的整个树.
考虑以下:
import yaml
class Foo(object):
def __init__(self, s, l=None, d=None):
self.s = s
self.l = l
self.d = d
def foo_constructor(loader, node):
values = loader.construct_mapping(node)
s = values["s"]
d = values["d"]
l = values["l"]
return Foo(s, d, l)
yaml.add_constructor(u'!Foo', foo_constructor)
f = yaml.load('''
--- !Foo
s: 1
l: [1, 2]
d: {try: this}''')
print(f)
# prints: 'Foo(1, {'try': 'this'}, [1, 2])'
Run Code Online (Sandbox Code Playgroud)
这工作得很好,因为f
持有的引用l
和d
对象,这实际上是充满了数据之后的Foo
对象被创建.
现在,让我们做一些更复杂的smidgen:
class Foo(object):
def __init__(self, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试加载一堆utf-8编码的字符串并使用PyYaml再次转储它们.这是加载/转储的代码:
lang_yml = yaml.load(codecs.open(lang + ".yml.old", "r", "utf-8"))
test_file_path = lang + '.yml'
stream = file(test_file_path, 'w')
yaml.dump(lang_yml, stream, default_flow_style=False, encoding=('utf-8'))
Run Code Online (Sandbox Code Playgroud)
但是以"恩到达"开头的字符串最终被保存为"恩到达\ xE8re".我究竟做错了什么?
有时候我必须在配置文件中指定时间(以秒为单位),并且编写精确的秒数非常烦人 - 相反,我想执行算术,所以我可以使用:
some_time: 1 * 24 * 60 * 60
Run Code Online (Sandbox Code Playgroud)
而不是确切的:
some_time: 86400
Run Code Online (Sandbox Code Playgroud)
不幸的是,在使用这一行时:some_time: 1 * 24 * 60 * 60
它会将该配置行视为字符串.当然,我可以使用 - eval(config['some_time'])
但我很想知道是否可以在YAML中执行算术运算?
我在使用python 2.7的ubunty 64并使用PyYAML-3.10
下面是我的yaml文件:
host:localhost
username:root
password:test
database:test
operations_database:operations
treeroot:
branch1:
name: Node 1
branch1-1:
name: Node 1-1
branch2:
name: Node 2
branch2-1:
name: Node 2-1
Run Code Online (Sandbox Code Playgroud)
当我运行以下代码时,我得到以下错误.但是,如果我删除treeroot上方的行,则代码可以正常工作:
from yaml import load, dump
try:
from yaml import CLoader as Loader, CDumper as Dumper
except ImportError:
from yaml import Loader, Dumper
f=open('amazon.yaml')
data = load(f, Loader=Loader)
Traceback (most recent call last):
File "/home/ubuntu/workspace/Amazon-Products-Crawler-1/config_files/test_yaml.py", line 10, in <module>
data = load(f, Loader=Loader)
File "/usr/local/lib/python2.7/dist-packages/yaml/__init__.py", line 71, in load
return loader.get_single_data()
File "/usr/local/lib/python2.7/dist-packages/yaml/constructor.py", line …
Run Code Online (Sandbox Code Playgroud) 我有以下YAML文件命名input.yaml
:
cities:
1: [0,0]
2: [4,0]
3: [0,4]
4: [4,4]
5: [2,2]
6: [6,2]
highways:
- [1,2]
- [1,3]
- [1,5]
- [2,4]
- [3,4]
- [5,4]
start: 1
end: 4
Run Code Online (Sandbox Code Playgroud)
我正在使用PyYAML加载它并打印结果如下:
import yaml
f = open("input.yaml", "r")
data = yaml.load(f)
f.close()
print(data)
Run Code Online (Sandbox Code Playgroud)
结果是以下数据结构:
{ 'cities': { 1: [0, 0]
, 2: [4, 0]
, 3: [0, 4]
, 4: [4, 4]
, 5: [2, 2]
, 6: [6, 2]
}
, 'highways': [ [1, 2]
, [1, …
Run Code Online (Sandbox Code Playgroud) 我有一个python项目,我想使用YAML(pyYaml 3.11),特别是因为它"非常"且用户可以在必要时在文本编辑器中轻松编辑.但问题是,如果我将YAML带入python应用程序(我将需要)并编辑内容(因为我需要),那么编写新文档通常不如我开始时那么漂亮.
pyyaml文档非常差 - 甚至没有将参数记录到转储函数.我找到了http://dpinte.wordpress.com/2008/10/31/pyaml-dump-option/.但是,我仍然缺少我需要的信息.(我开始查看源代码,但它似乎并不是最吸引人的.如果我没有得到解决方案,那么这是我唯一的办法.)
我从一个看起来像这样的文档开始:
- color green : inputs : - port thing : widget-hint : filename widget-help : Select a filename - port target_path : widget-hint : path value : 'thing' outputs: - port value: widget-hint : string text : | I'm lost and I'm found and I'm hungry like the wolf.
加载到python(yaml.safe_load(s))后,我尝试了几种方法将其转储出来:
>>> print yaml.dump( d3, default_flow_style=False, default_style='' ) - color green: inputs: - port thing: widget-help: Select a filename widget-hint: filename - port target_path: …