借助键路径从嵌套字典中获取值,这里是dict:
json = {
"app": {
"Garden": {
"Flowers": {
"Red flower": "Rose",
"White Flower": "Jasmine",
"Yellow Flower": "Marigold"
}
},
"Fruits": {
"Yellow fruit": "Mango",
"Green fruit": "Guava",
"White Flower": "groovy"
},
"Trees": {
"label": {
"Yellow fruit": "Pumpkin",
"White Flower": "Bogan"
}
}
}
Run Code Online (Sandbox Code Playgroud)
该方法的输入参数是以点分隔的键路径,从键路径="app.Garden.Flowers.white Flower"需要打印'Jasmine'.我的代码到目前为止:
import json
with open('data.json') as data_file:
j = json.load(data_file)
def find(element, JSON):
paths = element.split(".")
# print JSON[paths[0]][paths[1]][paths[2]][paths[3]]
for i in range(0,len(paths)):
data = JSON[paths[i]]
# data = data[paths[i+1]]
print …Run Code Online (Sandbox Code Playgroud) 如何使用行号删除JavaScript中的二维数组中的行.如果我想删除第4行中的所有元素,那该怎么办?
我有一个YAML文件,如下所示:
# Sense 1
- name : sense1
type : float
value : 31
# sense 2
- name : sense2
type : uint32_t
value : 1488
# Sense 3
- name : sense3
type : int32_t
value : 0
- name : sense4
type : int32_t
value : 0
- name : sense5
type : int32_t
value : 0
- name : sense6
type : int32_t
value : 0
Run Code Online (Sandbox Code Playgroud)
我想使用Python打开这个文件,更改一些值(见上文)并关闭文件.我怎样才能做到这一点 ?
例如,我想设置sense2 [value] = 1234,保持YAML输出相同.
当我用它运行任何命令时,Conda会出错.
Traceback (most recent call last):
File "/usr/local/bin/conda", line 7, in <module>
from conda.cli.main import main
File "/usr/local/lib/python2.7/dist-packages/conda/cli/__init__.py", line 8, in <module>
from .main import main # NOQA
File "/usr/local/lib/python2.7/dist-packages/conda/cli/main.py", line 46, in <module>
from ..base.context import context
File "/usr/local/lib/python2.7/dist-packages/conda/base/context.py", line 18, in <module>
from ..common.configuration import (Configuration, MapParameter, PrimitiveParameter,
File "/usr/local/lib/python2.7/dist-packages/conda/common/configuration.py", line 40, in <module>
from ruamel.yaml.comments import CommentedSeq, CommentedMap # pragma: no cover
ImportError: No module named ruamel.yaml.comments
Run Code Online (Sandbox Code Playgroud) 在 YAML 中,如何注释一行的一部分?
例如:
- name: "JAVA_OPTIONS"
value: "-Dconfig.dir.path=$(CONF_PATH) -Dpoint.dir.path=$(POINT_PATH)-
Xms256m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$(LOG_PATH)
-DMY_POD_NAME=$(MY_POD_NAME)"
Run Code Online (Sandbox Code Playgroud)
如何在值行内注释字符串?
喜欢"-Dpoint.dir.path=$(POINT_PATH)"会被评论,但所有其余的都会生效。
在我的一台服务器上,我有一些内存/磁盘KV服务,内存KV的行为类似于memcached,在初始化时要求一个大内存(10GB),磁盘Kv表现得像leveldbd,它的随机读取和顺序写入,它经常读了很多文件.内存全部使用libc malloc分配.
我的KV服务器进程不会消耗大量内存,如下所示(由于内存不足,我已经杀死内存KV,只留下磁盘KV,但可用内存仍然下降):
:~$top
PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
20 0 5030m 3.9g 2772 S 8 6.1 10430:52 tair_server
20 0 4833m 3.9g 4560 S 8 6.1 10171:07 tair_server
20 0 4844m 3.9g 3844 S 38 6.1 10073:32 tair_server
20 0 4765m 3.8g 4144 S 8 6.0 10552:39 tair_server
20 0 2941m 2.4g 9.8m S 0 3.8 256:45.70 tair_server
20 0 2953m 2.4g 12m S 1 3.7 276:54.64 tair_server
Run Code Online (Sandbox Code Playgroud)
但是,我的记忆消失了.
$free -m
total used free …Run Code Online (Sandbox Code Playgroud) 我正在设计一个新的配置/数据格式,它将在YAML中.许多输入是int/float值,带有相关单位(例如升,夸脱,品脱,秒,分钟......).
我一直在搜索和阅读,但仍然无法弄清楚:在YAML中将值和单位与配置项关联的最佳方法是什么?
示例:假设我有几种饮料的清单,(除其他外),我想输入它们的音量.我可以想到几个方面,但(至少在我看来)它们都不是真正理想的:
要求以相同单位输入所有音量值.
强制用户自己进行单位转换,这是单调乏味,容易出错并且以后难以验证,因为现在数量输入不同于为饮料列出的原始数量.(饮料来自几个不同的来源,每个来源可能使用不同的度量单位.)
用一系列体积和单位表示值.例:
volume: [ 0.5, Gallons ]
Run Code Online (Sandbox Code Playgroud)
(映射也会起作用,虽然更详细)序列可能没问题,但我不确定我是否对此感到满意.
使用两个"音量"值,一个用于值,另一个用于单位.例:
volume_value: 0.5
volume_units: Gallons
Run Code Online (Sandbox Code Playgroud)
我认为这不是首发.详细,非常松散的关联,容易出错.
改为使用字符串,并在应用程序中解析它.例:
volume: 0.5 Gallons
Run Code Online (Sandbox Code Playgroud)
最简单的输入,并且很容易编写一个健壮的解析器.看起来可能有点像黑客,但......
应用标签:
volume: !gallons 0.5
Run Code Online (Sandbox Code Playgroud)
不确定这个,因为我是YAML的新手并且还没有很好地理解标签.或许,语法更脆弱一些.
所以,问题是:根据YAML规范,或事实上的最佳实践/惯例,是否有一种表示价值+单位的特定方式?无论是我列出的五个之一还是别的,我都希望有一个"正确的答案",留在网站问题指南中.
我正在使用yaml文件,这些文件必须是人类可读和可编辑的,但也可以从Python代码编辑.我正在使用Python 2.7.3
该文件需要处理重音(主要用于处理法语文本).
以下是我的问题示例:
import codecs
import yaml
file = r'toto.txt'
f = codecs.open(file,"w",encoding="utf-8")
text = u'héhéhé, hûhûhû'
textDict = {"data": text}
f.write( 'write unicode : ' + text + '\n' )
f.write( 'write dict : ' + unicode(textDict) + '\n' )
f.write( 'yaml dump unicode : ' + yaml.dump(text))
f.write( 'yaml dump dict : ' + yaml.dump(textDict))
f.write( 'yaml safe unicode : ' + yaml.safe_dump(text))
f.write( 'yaml safe dict : ' + yaml.safe_dump(textDict))
f.close()
Run Code Online (Sandbox Code Playgroud)
书面文件包含:
write unicode : héhéhé, …Run Code Online (Sandbox Code Playgroud) 我在我的模式中有这样的模式对象定义swagger.yaml:
User:
type: object
properties:
username:
type: string
description: the user name
colors:
type: array
items: {
type: string,
enum: [ "red", "blue", "green" ]
}
description: user must have one or more colors associated
required:
- username
- colors
Run Code Online (Sandbox Code Playgroud)
但是,生成的服务器仍然很乐意接受使用此架构对象的POST请求作为不包含任何colors字段的必需body参数.
我是否可以在模式对象中color始终需要字段的方式配置Swagger,User理想情况下还必须包含枚举中的至少一个或多个项目?
我在AWS Elastic Beanstalk的软件配置选项卡中定义了一个名为MY_ENVIRONMENT_VARIABLE的环境变量.
现在我想在.ebextensions配置文件的"files:"部分中使用此环境变量.
Resources:
AWSEBAutoScalingGroup:
Metadata:
AWS::CloudFormation::Authentication:
S3Auth:
type: S3
buckets: arn:aws:s3:::SomeS3Bucket
roleName: aws-elasticbeanstalk-ec2-role
files:
"/tmp/application.properties" :
mode: "000644"
owner: root
group: root
source: { "Ref" : "MY_ENVIRONMENT_VARIABLE" }
authentication: S3Auth
container_commands:
01-apply-configuration:
command: mv /tmp/application.properties .
Run Code Online (Sandbox Code Playgroud)
似乎可以在"container_commands:"部分引用环境变量(通过使用bash脚本),但我找不到任何可以在"files:"部分内引用的引用.
有没有人有一个如何在"files:"部分中使用环境变量的例子?
amazon-s3 amazon-web-services amazon-elastic-beanstalk ebextensions
yaml ×5
python ×4
amazon-s3 ×1
anaconda ×1
conda ×1
config ×1
delete-row ×1
dictionary ×1
ebextensions ×1
edit ×1
javascript ×1
linux ×1
memory ×1
pyyaml ×1
rest ×1
ruamel.yaml ×1
swagger ×1
swagger-2.0 ×1
unicode ×1