我是YAML的新手,一直在寻找解析YAML文件和使用/访问解析后的YAML数据的方法.
我遇到了关于如何解析YAML文件的解释,例如,PyYAML 教程," 我如何在Python中解析YAML文件 "," 将Python dict转换为对象? ",但我没有找到的是关于如何从解析的YAML文件访问数据的简单示例.
假设我有一个YAML文件,例如:
treeroot:
branch1: branch1 text
branch2: branch2 text
Run Code Online (Sandbox Code Playgroud)
如何访问"branch1 text"文本?
" YAML解析和Python? "提供了一个解决方案,但是我在从更复杂的YAML文件访问数据时遇到了问题.而且,我想知道是否有一些标准的方法从解析的YAML文件访问数据,可能类似于" 树迭代 "或" 元素路径 "符号或解析XML文件时将使用的东西?
我正在尝试在 Google Colab 中进行常规导入。
此导入一直有效。
如果我尝试:
import plotly.express as px
Run Code Online (Sandbox Code Playgroud)
或者
import pingouin as pg
Run Code Online (Sandbox Code Playgroud)
我收到错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-19-86e89bd44552> in <module>()
----> 1 import plotly.express as px
9 frames
/usr/local/lib/python3.7/dist-packages/plotly/express/__init__.py in <module>()
13 )
14
---> 15 from ._imshow import imshow
16 from ._chart_types import ( # noqa: F401
17 scatter,
/usr/local/lib/python3.7/dist-packages/plotly/express/_imshow.py in <module>()
9
10 try:
---> 11 import xarray
12
13 xarray_imported = True
/usr/local/lib/python3.7/dist-packages/xarray/__init__.py in <module>()
1 import pkg_resources
2
----> 3 …Run Code Online (Sandbox Code Playgroud) 我有一个看起来像的yaml文件
---
level_1: "test"
level_2: 'NetApp, SOFS, ZFS Creation'
request: 341570
---
level_1: "test"
level_2: 'NetApp, SOFS, ZFS Creation'
request: 341569
---
level_1: "test"
level_2: 'NetApp, SOFS, ZFS Creation'
request: 341568
Run Code Online (Sandbox Code Playgroud)
我可以使用YAML在Perl中正确读取此内容,但在使用YAML的python中无法正确读取.它失败并出现错误:
期望流中的单个文档
程序:
import yaml
stram = open("test", "r")
print yaml.load(stram)
Run Code Online (Sandbox Code Playgroud)
错误:
Traceback (most recent call last):
File "abcd", line 4, in <module>
print yaml.load(stram)
File "/usr/local/pkgs/python-2.6.5/lib/python2.6/site-packages/yaml/__init__.py", line 58, in load
return loader.get_single_data()
File "/usr/local/pkgs/python-2.6.5/lib/python2.6/site-packages/yaml/constructor.py", line 42, in get_single_data
node = self.get_single_node()
File "/usr/local/pkgs/python-2.6.5/lib/python2.6/site-packages/yaml/composer.py", line 43, in get_single_node
event.start_mark) …Run Code Online (Sandbox Code Playgroud) 我试图从Python中读取hdf5文件中的数据.我可以使用读取hdf5文件h5py,但我无法弄清楚如何访问文件中的数据.
import h5py
import numpy as np
f1 = h5py.File(file_name,'r+')
Run Code Online (Sandbox Code Playgroud)
这有效,文件被读取.但是如何访问文件对象中的数据f1呢?
我知道在SO上有一些关于这个的问题,但我找不到我想要的东西.
我正在使用pyyaml来读取(.load()).yml文件,修改或添加一个键,然后.dump()再次写入它.问题是我想在转储后保留文件格式,但它会改变.
例如,我编辑键en.test.index.few说"Bye",而不是"Hello"
蟒蛇:
with open(path, 'r', encoding = "utf-8") as yaml_file:
self.dict = pyyaml.load(yaml_file)
Run Code Online (Sandbox Code Playgroud)
然后,更改密钥:
with open(path, 'w', encoding = "utf-8") as yaml_file:
dump = pyyaml.dump(self.dict, default_flow_style = False, allow_unicode = True, encoding = None)
yaml_file.write( dump )
Run Code Online (Sandbox Code Playgroud)
YAML:
之前:
en:
test:
new: "Bye"
index:
few: "Hello"
anothertest: "Something"
Run Code Online (Sandbox Code Playgroud)
后:
en:
anothertest: Something
test:
index:
few: Hello
new: Bye
Run Code Online (Sandbox Code Playgroud)
有没有办法保持相同的格式?,例如qoutes和order.我使用了错误的工具吗?
我知道也许原始文件不完全正确,但我无法控制它(这是一个Ruby on Rails i18n文件).
非常感谢你.
我有一个example.csv包含内容的文件
1,"A towel,",1.0
42," it says, ",2.0
1337,is about the most ,-1
0,massively useful thing ,123
-2,an interstellar hitchhiker can have.,3
Run Code Online (Sandbox Code Playgroud)
我如何example.csv用Python 阅读?
同样,如果我有
data = [(1, "A towel,", 1.0),
(42, " it says, ", 2.0),
(1337, "is about the most ", -1),
(0, "massively useful thing ", 123),
(-2, "an interstellar hitchhiker can have.", 3)]
Run Code Online (Sandbox Code Playgroud)
如何data使用Python 写入CSV文件?
通常当我打开文件时,我从不调用该close()方法,没有任何不好的事情发生.但我被告知这是不好的做法.这是为什么?
我使用以下格式解析大约6500行的YAML文件:
foo1:
bar1:
blah: { name: "john", age: 123 }
metadata: { whatever1: "whatever", whatever2: "whatever" }
stuff:
thing1:
bluh1: { name: "Doe1", age: 123 }
bluh2: { name: "Doe2", age: 123 }
thing2:
...
thingN:
foo2:
...
fooN:
Run Code Online (Sandbox Code Playgroud)
我只想用PyYAML库解析它(我认为在Python中没有其他替代方法:我如何在Python中解析YAML文件).
只是为了测试,我编写代码来解析我的文件:
import yaml
config_file = "/path/to/file.yaml"
stream = open(config_file, "r")
sensors = yaml.load(stream)
Run Code Online (Sandbox Code Playgroud)
使用time命令执行脚本以及我这次得到的脚本:
real 0m3.906s
user 0m3.672s
sys 0m0.100s
Run Code Online (Sandbox Code Playgroud)
那些价值看起来并不太好.我只想用JSON测试相同的内容,只需将相同的YAML文件转换为JSON:
import json
config_file = "/path/to/file.json"
stream = open(config_file, "r")
sensors = …Run Code Online (Sandbox Code Playgroud) 我有一些预处理与一些现有的.yml文件 - 但是,其中一些嵌入了Jinja模板语法:
A:
B:
- ip: 1.2.3.4
- myArray:
- {{ jinja.variable }}
- val1
- val2
Run Code Online (Sandbox Code Playgroud)
我想在这个文件中读取,并添加val3下myArray这样:
A:
B:
- ip: 1.2.3.4
- myArray:
- {{ jinja.variable }}
- val1
- val2
- val 3
Run Code Online (Sandbox Code Playgroud)
我试着手动写出jinja模板,但是他们用单引号写了: '{{ jinja.variable }}'
对于我来说,阅读这些.yml文件并修改它们的推荐方法是什么,尽管有预先存在的Jinja语法?我想向这些文件添加信息,保持其他所有相同.
我在Python 2.7+上使用PyYAML尝试了上述内容
是否可以使用我的数据库凭据创建一个py文件以连接到MySQL数据库。
con = [ [ip='0.0.0.0'],[username = 'root'],
[password='pswd'],[database='test']]
Run Code Online (Sandbox Code Playgroud)
然后在另一个文件上使用此文件。
喜欢
import dbcon.py*
dbcon.sort
con = mdb.connect(info from py file goes here.)
Run Code Online (Sandbox Code Playgroud) 我在 YAML 中有一个配置文件,当前使用 yaml.safe_load 作为字典加载。为了方便编写我的代码,我更愿意将它作为一组嵌套对象加载。引用字典的更深层次很麻烦,并且使代码更难阅读。
例子:
import yaml
mydict = yaml.safe_load("""
a: 1
b:
- q: "foo"
r: 99
s: 98
- x: "bar"
y: 97
z: 96
c:
d: 7
e: 8
f: [9,10,11]
""")
Run Code Online (Sandbox Code Playgroud)
目前,我访问诸如
mydict["b"][0]["r"]
>>> 99
Run Code Online (Sandbox Code Playgroud)
我希望能够做的是访问相同的信息,如
mydict.b[0].r
>>> 99
Run Code Online (Sandbox Code Playgroud)
有没有办法像这样将 YAML 加载为嵌套对象?或者我是否必须滚动自己的类并递归地将这些字典翻转为嵌套对象?我猜namedtuple可以让这更容易一些,但我更喜欢整个事情的现成解决方案。
考虑以下 Python (2.x) 代码:
for line in open('foo').readlines():
print line.rstrip()
Run Code Online (Sandbox Code Playgroud)
我认为由于打开的文件仍未被引用,因此必须自动关闭。我已经阅读了 Python 中的垃圾收集器,它可以释放未使用对象分配的内存。GC 是否足够通用来处理文件?