![](/img/trans.png)
[英]How can i remove the quotation marks from this tuple? and how can i homogeneous the list
[英]how can i dynamically keep the quotation marks from this config file?
data:
START_DT: '202001'
END_DT: '202104'
schema: products
我有上面的 YAML 文件。
我希望能够使用它,以便我得到:
set START_DT='202001';
set END_DT='202104';
set schema = products
请注意,日期在引号中,而产品不是。
with open("data.yml", "r") as ymlfile:
cfg = yaml.load(ymlfile)
lines=[]
for k,v in cfg['data'].items():
print("SET" +' '+ k+'='+ v)
var = ("SET" +' '+ k+'='+ v)
lines.append(var)
印刷:
SET START_DT=201901
SET END_DT=202104
SET SCHEMA=products
但是现在我已经丢失了原始配置中日期的引号..我怎样才能找回这些引号?
鉴于 Python 语法的灵活性,您可能会在一行或类似的地方找到一种方法,但我相信有一种更简洁的方法,我将在下面展示。
import yaml
with open("data.yaml", 'r') as file_:
config = yaml.safe_load(file_)
lines = []
for key, value in config['data'].items():
try:
out = f"SET {key}='{int(value)}';"
except ValueError:
out = f"SET {key}={value}"
print(out)
lines.append(out)
需要注意的一些事项:应避免在没有Loader
的情况下使用yaml.load
并将被弃用,如此处所述和解释。 另一件事是,要使这个确切的解决方案起作用,您需要 f 字符串。 如果你在Python3.7+
上,我相信你很好。
这里的问题是使用日期只是数字并且可以转换为 integer 的事实,并且唯一完全数字字段是日期。 请注意,如果情况并非总是如此,此解决方案将呈现意外的 output。
继续:如果您可以将值转换为 integer,它必须是(鉴于我解释的条件)一个日期,所以您使用单引号和最后的分号(或者分号应该在非常 output 中?) . 否则,在这种情况下,您将无法将其转换为 integer,从而引发ValueError
,您将使用不带单引号的原始值。
这是 YAML 规范的一部分。 任何看起来不像任何其他类型或被引用的东西都被解释为字符串。
如果您希望引用特定的键,当您打印它们时,您可以维护一个列表,列出应该针对哪些键。
QUOTED_KEYS = ["START_DT", "END_DT"]
with open("data.yml", "r") as ymlfile:
cfg = yaml.load(ymlfile)
lines = []
for k, v in cfg['data'].items():
if k in QUOTED_KEYS:
v = f"'{v}'"
s = f"SET {k}={v}"
print(s)
lines.append(s)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.